Viewsets
ViewSets本質(zhì)上只是一種基于類的視圖肆资,它不提供任何方法處理程序矗愧,比如“get()”、“post()”等等郑原。相反唉韭,它有一些動作,比如“l(fā)ist()”犯犁、“retrieve()”(檢索)属愤、“create()”等等。
動作只在實例化視圖的時候綁定到方法酸役。
user_list = UserViewSet.as_view({'get': 'list'})
user_detail = UserViewSet.as_view({'get': 'retrieve'})
通常住诸,您不會直接從viewset中實例化視圖驾胆,而是使用路由器注冊viewset,并自動確定URL 配置只壳。
router = DefaultRouter()
router.register(r'users', UserViewSet, 'user')
urlpatterns = router.urls
(1)ViewSetMixin(object)
重寫'.asview()'這樣它就需要一個執(zhí)行'action'的關鍵字將HTTP方法綁定到資源上的操作俏拱。
例如,要創(chuàng)建一個綁定“GET”和“POST”方法的具體視圖到“列表”和“創(chuàng)建”行動……
view = MyViewSet.as_view({'get': 'list', 'post': 'create'})
(2)ViewSet(ViewSetMixin, views.APIView)
基本ViewSet類在默認情況下不提供任何操作吼句。
(3)GenericViewSet(ViewSetMixin, generics.GenericAPIView)
GenericViewSet類在默認情況下不提供任何操作锅必,但是確實包含了通用視圖行為的基本集合,例如(“getobject”和“getqueryset”方法惕艳。)
(4)ReadOnlyModelViewSet(mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet)
一個提供默認“列表()”和“檢索()”操作的viewset搞隐。
(5)ModelViewSet(mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin, mixins.ListModelMixin,GenericViewSet)
一個提供默認“create()”、“檢索()”远搪、“更新()”劣纲,“部分更新()”、“銷毀()”和“列表()”操作的viewset谁鳍。
Generic
提供通常需要的行為的通用視圖癞季。
(1)GenericAPIView(views.APIView)
你需要設置或者覆蓋'getqueryset()'/'getserializerclass()'這些屬性。
如果你重寫了一個視圖方法倘潜,那么你調(diào)用'getqueryset()是很重要的绷柒,而不是直接訪問'queryset'屬性,因為“queryset”只會被評估一次涮因,并且這些結果被緩存了废睦,對于所有后續(xù)的請求。
如果您想要使用除pk以外的對象查找养泡,請設置“l(fā)ookupfield”嗜湃。對于更復雜的查找需求,覆蓋“getobject()”
(2)CreateAPIView(mixins.CreateModelMixin,GenericAPIView)
創(chuàng)建模型實例的具體視圖澜掩。
(3)ListAPIView(mixins.ListModelMixin, GenericAPIView)
列出一個queryset的具體視圖购披。
(4)RetrieveAPIView(mixins.RetrieveModelMixin, GenericAPIView)
用于檢索模型實例的具體視圖。
(5)DestroyAPIView(mixins.DestroyModelMixin, GenericAPIView)
刪除模型實例的具體視圖
(6)UpdateAPIView(mixins.UpdateModelMixin, GenericAPIView)
用于更新模型實例的具體視圖肩榕。
(7)ListCreateAPIView(mixins.ListModelMixin,mixins.CreateModelMixin,GenericAPIView)
列出一個queryset或創(chuàng)建一個模型實例的具體視圖今瀑。
(8)RetrieveUpdateAPIView(mixins.RetrieveModelMixin,mixins.UpdateModelMixin, GenericAPIView)
用于檢索、更新模型實例的具體視圖点把。
(9)RetrieveDestroyAPIView(mixins.RetrieveModelMixin,mixins.DestroyModelMixin橘荠, GenericAPIView)
用于檢索或刪除模型實例的具體視圖。
(10)RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, GenericAPIView)
用于檢索郎逃、更新或刪除模型實例的具體視圖哥童。
Mixin.py
用于通用型類視圖的基本構建塊。
我們還沒有將行為綁定到http方法處理程序褒翰,這使得mixin類以有趣的方式組合起來贮懈。
(1) CreateModelMixin(object)
創(chuàng)建一個模型實例
(2) ListModelMixin(object)
查詢集的列表
(3) RetrieveModelMixin(object)
檢索模型實例匀泊。
<pre style="margin-left:18.0pt;
(4) UpdateModelMixin(object)
更新模型實例。
(5) DestroyModelMixin(object)
刪除模型實例朵你。