Viewsets、Generic、Mimix解析

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í)例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基于類(lèi)的視圖的一個(gè)主要優(yōu)點(diǎn)是它們?cè)试S你組合可重復(fù)使用的行為。 REST框架通過(guò)提供大量預(yù)構(gòu)建視圖來(lái)提供常用模式,從...
    YYL07閱讀 748評(píng)論 0 0
  • API Reference GenericAPIView This class extends REST fram...
    陽(yáng)光小鎮(zhèn)少爺閱讀 2,727評(píng)論 0 1
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢(xún)集API 參...
    陽(yáng)光小鎮(zhèn)少爺閱讀 3,963評(píng)論 0 8
  • 最近在看《戰(zhàn)爭(zhēng)與和平》時(shí)看到一句話:“人類(lèi)只有兩種惡行,懶惰和迷信;人類(lèi)也只有兩種美德,勤勞和智慧”我就是背負(fù)...
    笑阿笑閱讀 650評(píng)論 0 0
  • 橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。 不識(shí)廬山真面目,只緣身在此山中。 嶺與峰是在同一高度下的不同視角所見(jiàn),當(dāng)俯瞰整座...
    方圓fg閱讀 845評(píng)論 4 6

友情鏈接更多精彩內(nèi)容