DRF路由组件

路由routers

对于是图集ViewSet,我们除了可以自己手动指定请求方式与动作action之间的对应关系外吗还可以使用Routers来帮助我们快速实现路由信息。

REST_framework提供了两个router

SimpleRouter

DefaultRouter

自动生成路由

1. 导入

from rest_framework.routers import SimpleRouter, DefaultRouter

2. 实例化

router = SimpleRouter()

# prefix, viewset, basename=None
router.register('user', views.UderView, 'user')

register 参数

prefix: 访问视图函数的路由前缀

viewset: 视图类

base_name: 路由别名的前缀

3. 注册

router.register('user',views.UserView,'user')

4. 添加到urlpatterns中

方式一

	-urlpatterns+=router.urls

方式二

urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
]

自动生成的路由对应五个视图扩展类的五个方法, 使用视图类中必须包括list,create, retrieve,uopdate,destory其中之一, 视图类必须继承五个视图扩展类+GenericAPIView或九个视图子类或者ModelViewSet和ReadOnlyModelViewSet.

DefaultRouter与SimpleRouter的区别是: Default会多附带一个默认的API根视图, 返回一个包含所有列表视图的超链接响应数据

from django.urls import path, re_path
from . import views
urlpatterns = [
    ...
]

"""使用drf提供路由类router给视图集生成路由列表"""
# 实例化路由类
# drf提供一共提供了两个路由类给我们使用,他们用法一致,功能几乎一样
from rest_framework.routers import DefaultRouter
router = DefaultRouter()

# 注册视图集
# router.register("路由前缀",视图集类)
router.register("user",views.UserView,'user)

# 把生成的路由列表追加到urlpatterns
print( router.urls )
urlpatterns += router.urls

action装饰器

自定义方法自动生成路由需要使用action方法装饰器

action参数

action(methods=None, detail=None, url_path=None, url_name=None, **kwargs):

methods: 声明该action对应的请求方式, 列表传递

detail: 默认是False, 控制路由是不是带pk参数

url_path: 控制路由url路径后的路径, 不写默认是函数名

url_name: 别名, 用于反向解析

class Test(ViewSet):
    @action(methods=['GET'], detail=False, url_path='login',)
    def login(self, request):
        return Response('ok')


版权声明:本文为weixin_67531112原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。