Viewsets
ViewSets本質(zhì)上只是一種基于類(lèi)的視圖,它不提供任何方法處理程序,比如“get()”、“post()”等等。相反,它有一些動(dòng)作,比如“l(fā)ist()”、“retrieve()”(檢索)、“create()”等等。
動(dòng)作只在實(shí)例化視圖的時(shí)候綁定到方法。
user_list = UserViewSet.as_view({'get': 'list'})
user_detail = UserViewSet.as_view({'get': 'retrieve'})
通常,您不會(huì)直接從viewset中實(shí)例化視圖,而是使用路由器注冊(cè)viewset,并自動(dòng)確定URL 配置。
router = DefaultRouter()
router.register(r'users', UserViewSet, 'user')
urlpatterns = router.urls
(1)ViewSetMixin(object)
重寫(xiě)'.asview()'這樣它就需要一個(gè)執(zhí)行'action'的關(guān)鍵字將HTTP方法綁定到資源上的操作。
例如,要?jiǎng)?chuàng)建一個(gè)綁定“GET”和“POST”方法的具體視圖到“列表”和“創(chuàng)建”行動(dòng)……
view = MyViewSet.as_view({'get': 'list', 'post': 'create'})
(2)ViewSet(ViewSetMixin, views.APIView)
基本ViewSet類(lèi)在默認(rèn)情況下不提供任何操作。
(3)GenericViewSet(ViewSetMixin, generics.GenericAPIView)
GenericViewSet類(lèi)在默認(rèn)情況下不提供任何操作,但是確實(shí)包含了通用視圖行為的基本集合,例如(“getobject”和“getqueryset”方法。)
(4)ReadOnlyModelViewSet(mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet)
一個(gè)提供默認(rèn)“列表()”和“檢索()”操作的viewset。
(5)ModelViewSet(mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin, mixins.ListModelMixin,GenericViewSet)
一個(gè)提供默認(rèn)“create()”、“檢索()”、“更新()”,“部分更新()”、“銷(xiāo)毀()”和“列表()”操作的viewset。
Generic
提供通常需要的行為的通用視圖。
(1)GenericAPIView(views.APIView)
你需要設(shè)置或者覆蓋'getqueryset()'/'getserializerclass()'這些屬性。
如果你重寫(xiě)了一個(gè)視圖方法,那么你調(diào)用'getqueryset()是很重要的,而不是直接訪問(wèn)'queryset'屬性,因?yàn)椤皅ueryset”只會(huì)被評(píng)估一次,并且這些結(jié)果被緩存了,對(duì)于所有后續(xù)的請(qǐng)求。
如果您想要使用除pk以外的對(duì)象查找,請(qǐng)?jiān)O(shè)置“l(fā)ookupfield”。對(duì)于更復(fù)雜的查找需求,覆蓋“getobject()”
(2)CreateAPIView(mixins.CreateModelMixin,GenericAPIView)
創(chuàng)建模型實(shí)例的具體視圖。
(3)ListAPIView(mixins.ListModelMixin, GenericAPIView)
列出一個(gè)queryset的具體視圖。
(4)RetrieveAPIView(mixins.RetrieveModelMixin, GenericAPIView)
用于檢索模型實(shí)例的具體視圖。
(5)DestroyAPIView(mixins.DestroyModelMixin, GenericAPIView)
刪除模型實(shí)例的具體視圖
(6)UpdateAPIView(mixins.UpdateModelMixin, GenericAPIView)
用于更新模型實(shí)例的具體視圖。
(7)ListCreateAPIView(mixins.ListModelMixin,mixins.CreateModelMixin,GenericAPIView)
列出一個(gè)queryset或創(chuàng)建一個(gè)模型實(shí)例的具體視圖。
(8)RetrieveUpdateAPIView(mixins.RetrieveModelMixin,mixins.UpdateModelMixin, GenericAPIView)
用于檢索、更新模型實(shí)例的具體視圖。
(9)RetrieveDestroyAPIView(mixins.RetrieveModelMixin,mixins.DestroyModelMixin, GenericAPIView)
用于檢索或刪除模型實(shí)例的具體視圖。
(10)RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, GenericAPIView)
用于檢索、更新或刪除模型實(shí)例的具體視圖。
Mixin.py
用于通用型類(lèi)視圖的基本構(gòu)建塊。
我們還沒(méi)有將行為綁定到http方法處理程序,這使得mixin類(lèi)以有趣的方式組合起來(lái)。
(1) CreateModelMixin(object)
創(chuàng)建一個(gè)模型實(shí)例
(2) ListModelMixin(object)
查詢(xún)集的列表
(3) RetrieveModelMixin(object)
檢索模型實(shí)例。
<pre style="margin-left:18.0pt;
(4) UpdateModelMixin(object)
更新模型實(shí)例。
(5) DestroyModelMixin(object)
刪除模型實(shí)例。