打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
08 解析模块

解析模块

为什么要配置解析模块

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."
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DRF——解析器
后端无法解析前端发送到request payload类型数据
Python接口测试- requests 发送 post 请求
Golang 微框架 Gin 简介
Android Http 请求乱码(参数)乱码 解决
express处理get与post请求
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服