07 渲染模塊

渲染模塊

源碼入口

渲染模塊 第四步: 對返回結果進行再次加工,
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')
相關文章
相關標籤/搜索