【问题标题】:How does routers and viewsets configure their urls?路由器和视图集如何配置它们的 url?
【发布时间】:2019-06-28 21:39:28
【问题描述】:

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

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

与router对应的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

【问题讨论】:

    标签: django django-rest-framework django-rest-viewsets


    【解决方案1】:

    当您注册视图集时,它将为上述情况生成以下 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删除资源。

    我们还可以传递一个额外的关键字参数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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 2018-02-28
      • 2014-06-28
      • 1970-01-01
      • 2020-01-21
      • 2016-11-14
      • 2011-01-08
      • 2015-01-23
      相关资源
      最近更新 更多