Django前后端分离实践之DRF--08

一、视图集和路由器

REST框架包括一个用于处理ViewSets的抽象,它允许开发人员集中精力对API的状态和交互进行建模,并根据常规约定自动处理URL构造。

ViewSet类与View类几乎相同,不同之处在于它们提供诸如readupdate之类的操作,而不是get或put等方法处理程序。

最后一个ViewSet类只绑定到一组方法处理程序,当它被实例化成一组视图的时候,通常通过使用一个Router类来处理自己定义URL conf的复杂性。

1. 导入模块

from rest_framework import viewsets

2. 重构视图

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = serializers.BookSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly)

Django前后端分离实践之DRF--08
选区_036

3. 配置路由

book_list = views.BookViewSet.as_view(
    {
        'get': 'list',
        'post': 'create'
    }
)

book_detail = views.BookViewSet.as_view(
    {
        'get': 'retrieve',
        'put': 'update',
        'patch': 'partial_update',
        'delete': 'destory'
    }
)

urlpatterns = [
   ...
    # 使用viewset
    url(r'^books/$',book_list,name='book-list'),
    url(r'^books/(?P<pk>[0-9])/$',book_detail,name='book-detail')
    ....
]
Django前后端分离实践之DRF--08
选区_037
  • 刷新浏览器
Django前后端分离实践之DRF--08
选区_038

4. 改进代码(路由器)

- 导入模块

from rest_framework.routers import DefaultRouter
  • 注册路由器
router = DefaultRouter()
router.register(r'^books/$',views.BookViewSet)

[图片上传失败...(image-9be0f-1540133261546)]

  • 刷新浏览器
Django前后端分离实践之DRF--08
选区_041
class PublisherViewSet(viewsets.ModelViewSet):
    queryset = Publisher.objects.all()
    serializer_class = serializers.PublisherSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
router.register(r'publishers', views.Publisher)
Django前后端分离实践之DRF--08
选区_043
Django前后端分离实践之DRF--08
选区_044
Django前后端分离实践之DRF--08
选区_045