1)drf給咱們提供了多種解析數據包方式的解析類 2)咱們能夠經過配置,來控制前臺提交的哪些格式的數據後臺在解析,哪些數據不解析 3)全局配置就是針對每個視圖類,局部配置就是針對指定的視圖類,讓它們能夠按照配置規則選擇性解析數據
# APIView類的dispatch方法中 request = self.initialize_request(request, *args, **kwargs) # 點進去 # 獲取解析類 parsers=self.get_parsers(), # 點進去 # 去類屬性(局部配置) 或 配置文件(全局配置) 拿 parser_classes return [parser() for parser in self.parser_classes]
自定義全局配置:settings.pypython
REST_FRAMEWORK = { # 全局解析配置 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', # 解析json數據包 'rest_framework.parsers.FormParser', # 解析urlencoded數據包 'rest_framework.parsers.MultiPartParser' # 解析from-data數據包 ], }
自定義局部配置:應用views.py的具體視圖類json
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.parsers import JSONParser,FormParser,MultiPartParser class Book(APIView): # 局部解析配置 parser_classes = [FormParser] # 只解析json數據包 def get(self, request, *args, **kwargs): ... def post(self, request, *args, **kwargs): # url拼接參數 : 只有一種傳參方式,參數都在query_params print(request.query_params) # <QueryDict: {'pk': ['1']}> # 數據包參數:有三種傳參方式, # multipart/form-data | application/x-www-form-urlencoded | application/json print(request.data) # <QueryDict: {'title': ['ha'], 'price': ['3.33']}> return Response('post ok')
補充:app
# 禁用 json 方法傳輸數據包時用json傳輸數據則報一下錯誤 { "detail": "Unsupported media type \"application/json\" in request." } # 禁用 urlencoded 方法傳輸數據包時用urlencoded傳輸數據則報一下錯誤 { "detail": "Unsupported media type \"application/x-www-form-urlencoded\" in request." } # 禁用 form-data 方法傳輸數據包時用form-data傳輸數據則報一下錯誤 { "detail": "Unsupported media type \"multipart/form-data; boundary=--------------------------159319842159734003915314\" in request." }