我正在阅读一长段代码。并且卡在路由器和视图集如何自动配置其 URL 上。例如。views.py 文件为:
class UserViewSet(viewsets.ModelViewSet):
authentication_classes = (BasicAuthentication,SessionAuthentication)
permission_classes = (IsAuthenticated,)
serializer_class = UserSerializer
queryset = User.objects.all()
与路由器对应的网址为:
router = DefaultRouter()
router.register(r'users',views.UserViewSet,basename='user')
urlpatterns = router.urls
在上面的情况下,视图集中不同操作的相应 url 是什么,即列表、创建、检索、更新、partial_update和销毁,如 djangorestframework 文档中提到的视图集:http://www.tomchristie.com/rest-framework-2-docs/api-guide/viewsets
注册视图集时,它将为上述情况生成以下 url 模式。
router.register(prefix='users', viewset=views.UserViewSet, basename='user')
它遵循以下正则表达式模式
# Regex for list
r'^{prefix}{trailing_slash}$'
# Regex for detail
r'^{prefix}/{lookup}{trailing_slash}$'
1. 列表路由器允许http
方法(如get
(检索资源和post
创建资源。
2.详细路由器允许http
方法(如get
(检索资源的数据,put
更新资源的数据,patch
部分更新资源,delete
删除资源。
我们还可以在使用 reverse
生成动态 url 时传递一个额外的关键字参数format
。
上述情况的网址格式
[<URLPattern '^users/$' [name='user-list']>,
<URLPattern '^users.(?P<format>[a-z0-9]+)/?$' [name='user-list']>,
<URLPattern '^users/(?P<pk>[^/.]+)/$' [name='user-detail']>,
<URLPattern '^users/(?P<pk>[^/.]+).(?P<format>[a-z0-9]+)/?$' [name='user-detail']>,
<URLPattern '^$' [name='api-root']>,
<URLPattern '^.(?P<format>[a-z0-9]+)/?$' [name='api-root']>]
参考:https://github.com/encode/django-rest-framework/blob/master/rest_framework/routers.py