我在读经历了漫长的一段代码。并停留在如何路由器和viewsets自动配置它们的网址。对于如。在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
在上述情况下,这将是在viewsets不同的动作,即列表中的相应的网址,创建,检索,更新,partial_update并摧毁对viewsets的djangorestframework文档中提到:http://www.tomchristie.com/rest-framework-2-docs/api-guide/viewsets
当您注册的视图集就会产生上述情况的以下网址模式。
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
生成动态的URL我们也可以通过一个额外的关键字参数reverse
。
[<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