渲染模塊 第四步: 對返回結果進行再次加工,
self.response = self.finalize_response(request, response, *args, **kwargs)python
# 最後解析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中json
REST_FRAMEWORK = { # drf提供的渲染類 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', # 只顯示出json數據 'rest_framework.renderers.BrowsableAPIRenderer', # 渲染出頁面,注意是BrowsableAPIRenderer ], }
JSONRenderer和BrowsableAPIRenderer都禁用會報錯
api
只禁用JSONRenderer ,只能經過drf自帶訪問,postman訪問會報錯源碼分析
只禁用BrowsableAPIRenderer 只能經過postman訪問post
自定義局部配置:某一個或一些實體類單獨處理,在views.py視圖類中提供對應的類屬性rest
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')