08解析模块

08 解析模块[Python基础]

解析模块

为什么要配置解析模块

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.py

REST_FRAMEWORK = {

# 全局解析配置

"DEFAULT_PARSER_CLASSES": [

"rest_framework.parsers.JSONParser", # 解析json数据包

"rest_framework.parsers.FormParser", # 解析urlencoded数据包

"rest_framework.parsers.MultiPartParser" # 解析from-data数据包

],

}

自定义局部配置:应用views.py的具体视图类

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")

补充:

# 禁用 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."

}

以上是 08解析模块 的全部内容, 来源链接: utcz.com/z/537962.html

回到顶部