django rest_framework視圖類繼承鏈
劉昆
發(fā)布于 廣東 2018-06-29 · 3.0w瀏覽 5贊

APIView

APIView繼承django的view,內(nèi)部對request對象進(jìn)行了封裝,支持用戶認(rèn)證、權(quán)限驗證、流量控制、加入restframework的render的渲染和各種parser來解析請求body、根據(jù)url進(jìn)行的接口版本解析

ViewSetMixin

ViewSetMixin重寫了as_view()方法,在該方法中提供了action參數(shù)來將http method映射為ViewSet內(nèi)部的接口請求處理方法,請求不再走dispatch方法進(jìn)行分發(fā),這樣做的好處是提高了代碼的可讀性。as_view()方法的實現(xiàn)原理是閉包。它返回一個view(request,?args, *kwargs)視圖函數(shù),該函數(shù)內(nèi)部保存了一個類視圖的對象實例。

ViewSet

繼承了ViewSetMixin和APIView

GenericAPIView

繼承了APIView,在此基礎(chǔ)上引入了query_set、serializer_class、lookup_field、lookup_url_kwarg、pagination_class、filter_backends?

query_set保存一個模型類查詢的結(jié)果技?

serializer_class保存模型相關(guān)的序列化類?

lookup_field,指定模型實例中的主鍵字段名稱,默認(rèn)是'pk'?

lookup_url_kwarg, 指定url參數(shù)中映射到模型主鍵的key, 默認(rèn)是None?

pagination_class,指定用于分頁的類?

filter_backends,指定一些backend類用于queryset的過濾,包含一個filter_queryset(request, queryset, view_obj)的方法?

get_queryset()方法,相比直接訪問self.queryset,get_queryset()每次都會調(diào)用self.queryset.all()來重新獲取新的queryset?


劉昆
瀏覽 3.0w
5
相關(guān)推薦
最新評論
贊過的人 5
評論加載中...

暫無評論,快來評論吧!