REST framework 渲染模塊

作用

根據 用戶請求URL 或 用戶可接受的類型,篩選出合適的 渲染組件。

內置渲染器

from rest_framework.renderers import JSONRenderer
from rest_framework.renderers import BrowsableAPIRenderer
from rest_framework.renderers import AdminRenderer
from rest_framework.renderers import HTMLFormRenderer

顯示json格式:JSONRenderer

訪問URL:

默認顯示格式:BrowsableAPIRenderer(可以修改它的html文件)

訪問URL:

表格方式:AdminRenderer

訪問URL:

form表單方式:HTMLFormRenderer

訪問URL:

源碼分析

源碼入口
APIView類的dispatch方法中:self.response = self.finalize_response(request, response, *args, **kwargs)

源碼分析

# 最後解析reponse對象數據
self.response = self.finalize_response(request, response, *args, **kwargs) 點進去
​
# 拿到運行的解析類的對象們
neg = self.perform_content_negotiation(request, force=True) 點進去
​
# 獲得解析類對象
renderers = self.get_renderers() 點進去
​
# 從視圖類中得到renderer_classes請求類,如何實例化一個個對象形參解析類對象列表
return [renderer() for renderer in self.renderer_classes]
​
​
# 重點:self.renderer_classes獲取renderer_classes的順序
#   自己視圖類的類屬性(局部配置) => 
#   APIView類的類屬性設置 => 
#   自己配置文件的DEFAULT_RENDERER_CLASSES(全局配置) => 
#   drf配置文件的DEFAULT_RENDERER_CLASSES

使用

  • 全局配置 所有視圖類統一處理

在項目的settings.py中

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': ['rest_framework.renderers.JSONRenderer']
}
  • 局部配置 某一個或一些實體類單獨處理

在views.py視圖類中提供對應的類屬性

from rest_framework.renderers import JSONRenderer
class Test2(APIView):
    # 局部配置
    renderer_classes = [JSONRenderer]  # 所在類局部配置
    def get(self, request, *args, **kwargs):
        return Response('drf get ok 2')
​
    def post(self, request, *args, **kwargs):
        return Response('drf post ok 2')

在setting.py中配置REST_FRAMEWORK,完成的是全局配置,所有接口統一處理
如果只有部分接口特殊化,可以完成 - 局部配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章