美文网首页
12、Rest Framework视图集的路由设置

12、Rest Framework视图集的路由设置

作者: 小啊小狼 | 来源:发表于2020-09-22 10:07 被阅读0次

问题

在使用DRF视图集时,往往需要配一大堆路由,实在是太麻烦了。例如:

# urls.py
urlpatterns = [
    path('projects/', views.ProjectsViewSet.as_view({
        'get': 'list',
        'post': 'create'
    })),
    path('projects/names/', views.ProjectsViewSet.as_view({
        'get': 'names'
    })),
    path('projects/<int:pk>/', views.ProjectsViewSet.as_view({
        'get': 'retrieve',
        'put': 'update',
        'delete': 'destroy'
    })),
    path('projects/<int:pk>/interfaces/', views.ProjectsViewSet.as_view({
        'get': 'interfaces'
    })),
]

解决方式

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

REST framework提供了两个router

  • SimpleRouter
  • DefaultRouter

Routers路由使用方法

1.创建router对象,并注册视图集。

from rest_framework.routers import DefaultRouter, SimpleRouter
from projects import views

# 定义路由对象
# router = SimpleRouter()
router = DefaultRouter()
# 使用路由对象.register()方法,来进行注册
router.register(r'projects', views.ProjectsViewSet)

register(prefix, viewset, base_name)方法说明:

  • prefix 该视图集的路由前缀
  • viewset 视图集
  • base_name 路由名称的前缀

2.添加路由数据

urlpatterns = [
   ...
]
urlpatterns += router.urls

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

相关文章

网友评论

      本文标题:12、Rest Framework视图集的路由设置

      本文链接:https://www.haomeiwen.com/subject/tkavyktx.html