1

我正在阅读一段很长的代码。并且被困在路由器和视图集如何自动配置它们的 URL 上。例如。views.py 文件是:

class UserViewSet(viewsets.ModelViewSet):
     authentication_classes = (BasicAuthentication,SessionAuthentication)
     permission_classes = (IsAuthenticated,)
     serializer_class = UserSerializer
     queryset = User.objects.all()

与路由器对应的url是:

router = DefaultRouter()
router.register(r'users',views.UserViewSet,basename='user')
urlpatterns = router.urls

在上述情况下,视图集中不同操作的相应 url 是什么,即列表、创建、检索、更新、部分更新和销毁,如视图集的 djangorestframework 文档中所述:http ://www.tomchristie.com/rest -framework-2-docs/api-guide/viewsets

4

1 回答 1

4

当您注册视图集时,它将为上述情况生成以下 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方法。 2.细节路由器允许诸如检索资源的数据、更新资源的数据、资源的部分更新和删除资源的方法。getpost
httpgetputpatchdelete

我们还可以format在使用reverse生成动态 url 时传递一个额外的关键字参数。

上述案例的 URL 模式

[<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

于 2019-02-05T06:29:36.283 回答