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?





暫無評論,快來評論吧!