07 渲染模組
阿新 • • 發佈:2020-12-01
渲染模組
原始碼入口
渲染模組 第四步: 對返回結果進行再次加工,
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,然後從api_settings中獲取渲染模組的配置 1.自己檢視類的類屬性(區域性配置) => 2.APIView類的類屬性設定 => 3.自己配置檔案的DEFAULT_RENDERER_CLASSES(全域性配置) => 4.drf配置檔案的DEFAULT_RENDERER_CLASSES '''
如何使用
自定義全域性配置:所有檢視類統一處理,在專案的settings.py中
REST_FRAMEWORK = {
# drf提供的渲染類
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', # 只顯示出json資料
'rest_framework.renderers.BrowsableAPIRenderer', # 渲染出頁面,注意是BrowsableAPIRenderer
],
}
JSONRenderer和BrowsableAPIRenderer都禁用會報錯
只禁用JSONRenderer ,只能通過drf自帶訪問,postman訪問會報錯
只禁用BrowsableAPIRenderer 只能通過postman訪問
自定義區域性配置:某一個或一些實體類單獨處理,在views.py檢視類中提供對應的類屬性
class Test(APIView): def get(self, request, *args, **kwargs): return Response('drf get ok') def post(self, request, *args, **kwargs): return Response('drf post ok') # 在setting.py中配置REST_FRAMEWORK,完成的是全域性配置,所有介面統一處理 # 如果只有部分介面特殊化,可以完成 - 區域性配置 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')