Loading

路由组件

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
posted @ 2024-04-21 21:46  HuangQiaoqi  阅读(9)  评论(0编辑  收藏  举报