日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django_rest_framework之GenericAPIView(一)源码讲解

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django_rest_framework之GenericAPIView(一)源码讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、GenericAPIView是APIView的子類,所以具備APIView的所有功能
a、具備View的所有特性
b、提供了認證、授權、限流功能
c、將JsonResponse——》Response(如果是序列化輸出多條數據將safe=False去掉)
d、通過request.data獲取前端傳遞的參數,后端通過請求頭中的content_Type參數,生成指定的數據類型(application / json、application / x - www - form - urlencoded、multipart / form - data)
GenericAPIView
除了具備APIView的所有功能外,還具備了自己額外的功能


2、一旦繼承GenericAPIView父類(GenericAPIView的子類)
a、具備View的所有特性
b、具備了認證、授權、限流功能
c、還支持對于獲取列表數據接口的功能:搜索、排序、分頁
GenericAPIView需要指定queryset、serializer_class類屬性
queryset:指定當前類視圖的實例方法需要使用的查詢集對象
serializer_class:指定當前類視圖的實例方法需要的序列化器類

導入 from rest_framework.generics import GenericAPIView

3、代碼最好不要直接用下列代碼
queryset=self.queryset、serializer=self.serializers_class(instance=self.queryset, many=True)
建議用
queryset=self.get_queryset()
serializer = self.get_serializer(instance=queryset, many=True)


源碼分析:


為什么要這么做呢?我直接用類屬性queryset=self.queryset不就可以嗎???

原因:為了以后可以重寫get_queryset方法,例如用戶有權限(獲取的是完整的數據)和用戶無權限(獲取的是部分簡單的數據)下獲取到的列表數據不是一套查詢集,接口之間用到的數據集不同

源碼分析:

注意:
1、在實例方法中,往往使用get_queryset()方法獲取查詢集對象
2、一般不會直接調用queryset類屬性,原因:為了提供讓用戶重寫get_queryset()方法
3、如果未重寫get_queryset()方法,那么必須得指定queryset類屬性
4、在實例方法中,往往使用get_serializer方法獲取序列化器類
5、一般不會直接調用serializer_class類屬性,原因:為了提供讓用戶重寫get_serializer_class()方法
6、如果未重寫get_serializer_class()方法,那么必須得指定serializer_class類屬性
4、get_object()方法


1、父類給提供了get_object()方法,不需要重寫,直接繼承,代碼如下:

2、pk也不用傳遞,可以源碼調試

結果如下圖

3、如果路由視圖我設置為kk

只需要在類中定義屬性:lookup_url_kwarg = ‘kk’


a、lookup_url_kwarg默認為None
b、如果lookup_url_kwarg默認為None,那么lookup_url_kwarg與look_field相同(pk)
c、lookup_url_kwarg指定url路由條目中外鍵的路徑參數名稱
lookup_url_kwarg = ‘kk’
d、如果不傳lookup_url_kwarg(一般不需要傳遞),默認為pk,如果傳遞的話需要在前端路由中指定

get_object可以獲取模型對象,無需傳遞外鍵值

5、最后優化的代碼如下:

總結

以上是生活随笔為你收集整理的django_rest_framework之GenericAPIView(一)源码讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。