路由routers
对于是图集ViewSet,我们除了可以自己手动指定请求方式与动作action之间的对应关系外吗还可以使用Routers来帮助我们快速实现路由信息。
REST_framework提供了两个router
SimpleRouter
DefaultRouter
自动生成路由
1. 导入
from rest_framework.routers import SimpleRouter, DefaultRouter2. 实例化
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.urlsaction装饰器
自定义方法自动生成路由需要使用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版权协议,转载请附上原文出处链接和本声明。