DRF-Parser解析器元件原始碼分析和應用

harry6發表於2024-10-27

1. 解析器原始碼分析

注意:以下原始碼為了方便理解已進行簡化,只保留了解析器相關的程式碼

# 檢視函式:
class MyView(APIView):
    def post(self, request):
        print(self.request.data)  # 觸發解析流程
        return Response("ok")
解析並獲取資料的原始碼分析:

image
image

獲取解析器的原始碼分析:

image
image

解析器解析資料的原始碼分析(以JSONParser為例):

image

2.實踐應用

# 檢視類中:
class MyView(APIView):
    # 指定解析器(如果未指定則用預設的parser_classes=[MultiPartParser, JSONParser, FormParser]
    parser_classes = [JSONParser, FormParser]  # 只能解析JSON和form表單資料

    # 匹配解析器的方法(預設使用該類中的方法來匹配解析器,即使不顯式地寫出來也能生效)
    content_negotiation_class = DefaultContentNegotiation

    def post(self, request):
        print(self.request.data)
        return Response("ok")

相關文章