Django--檢視集ViewSet
阿新 • • 發佈:2019-01-22
ViewSet主要通過繼承ViewSetMixin來實現在呼叫as_view()時傳入字典(如{'get':'list'}
)的對映處理工作。
常用的檢視集父類
GenericViewSet 繼承自GenericAPIView
與ViewSetMixin
,在實現了呼叫as_view()時傳入字典(如{'get':'list'}
)的對映處理工作的同時,還提供了GenericAPIView
提供的基礎方法,可以直接搭配Mixin擴充套件類使用。
from rest_framework import mixins from rest_framework.viewsets import GenericViewSet class BookInfoViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,GenericViewSet): """使用GenericViewSet實現返回列表和單一值""" # 指定序列化器 serializer_class = BookInfoSerializer # 制定查詢集 queryset = BookInfo.objects.all()
url設定:
url(r'^books/$', new_views.BookInfoViewSet.as_view({'get':'list'})),
url(r'^books/(?P<pk>\d+)/$', new_views.BookInfoViewSet.as_view({'get':'retrieve'})),
執行結果:
檢視集中定義附加action動作
def latest(self, request): """ 返回最新的圖書資訊 GET /books/latest """ book = BookInfo.objects.latest('id') serializer = self.get_serializer(book) return Response(serializer.data) def read(self, request, pk): """ 修改圖書的閱讀量資料 PUT /books/<pk>/read/ 遵循REST設計風格的url命名方式 """ book = self.get_object() book.bread = request.data.get('read') book.save() serializer = self.get_serializer(book) return Response(serializer.data)
url設定:
url(r"^books/latest/$",new_views.BookInfoViewSet.as_view({'get':'latest'})),
url(r"^books/(?P<pk>\d+)/read/$",new_views.BookInfoViewSet.as_view({'put':'read'})),
執行效果:
read 路由傳送put請求,第一次報錯,我們將字典清空,新增'read':222 在重新整理就成功了