路由器和视图集如何配置其 URL



我正在阅读一长段代码。并且卡在路由器和视图集如何自动配置其 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

相关内容

  • 没有找到相关文章

最新更新