Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系,还可以使用Routers类来快速实现路由的创建
- SimpleRouter(常用)
- DefaultRouter(用的少)
# 方式一
# 1.导入Routers类
from rest_framework.routers import DefaultRouter
# 2.实例化对象
router = DefaultRouter()
# 3.将视图集注册到路由器中: 第一个参数是url前缀,第二个是视图类 ,第三个是别名
router.register('user', UserView, 'user')
# 4.将路由添加到路由列表中
urlpatterns += router.urls
# 方式二
# 前三步骤一样
# 1.导入include函数
from django.urls import include
# 2.在 Django 项目的 URL 配置中使用 include() 函数: 这样可以多一层路由
urlpatterns = [
path('', include(router.urls)) # 将路由器生成的 URL 配置包含到根路径下
]
试图类中派生的方法,自动生成路由(action)
class Login(ViewSetMixin, APIView):
authentication_classes = []
permission_classes = []
@action(methods=['POST'], detail=False) # 自己扩展的方法(派生)
def login(self, request, *args, **kwargs):
username = request.data.get('username')
password = request.data.get('password')
user_alive = models.User.objects.filter(username=username, password=password).first()
if user_alive:
token = uuid.uuid4()
models.User_token.objects.update_or_create(defaults={'token':token}, user=user_alive)
return Response({'code':100, 'msg':'登录成功', 'token':token}, headers={'token':token})
else:
return Response({'code':101, 'msg':'登录失败'})
# 这样自动生成的路由是(books/login/) (如果prefix参数传空字符串,则是/login/)
'''
参数解释:
method: 用来指定请求方式,默认GET
detail: 用来指定是否传入pk值(如:查所有或查单条),False:不传pk,True:传pk
url_path: 用来指定url的路径,默认方法名
url_name: 用来指定url的别名
'''
'''
注意:
1 如果继承了APIView,那么想要自动创建路由,则必须写action动作并在urls.py中传basename参数来指定视图
2 必须继承ViewSetMixin
标签:password,url,token,user,组件,include,路由
From: https://www.cnblogs.com/Hqqqq/p/18149567