问题
在使用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根视图,返回一个包含所有列表视图的超链接响应数据。
网友评论