1. 程式人生 > 實用技巧 >07 渲染模組

07 渲染模組

渲染模組

原始碼入口

渲染模組 第四步: 對返回結果進行再次加工,
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')