• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

08 解析模块

python 搞java代码 3年前 (2022-05-21) 16次浏览 已收录 0个评论

解析模块

为什么要配置解析模块

<code class="language-python">1)drf给我们提供了多种<a href="https://www.gaodaima.com/tag/%e8%a7%a3%e6%9e%90" title="查看更多关于解析的文章" target="_blank">解析</a>数据包方式的解析类
2)我们可以通过<a href="https://www.gaodaima.com/tag/%e9%85%8d%e7%bd%ae" title="查看更多关于配置的文章" target="_blank">配置</a>,来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析
3)全局配置就是针对每一个视图类,局部配置就是针对指定的视图类,让它们可以按照配置规则选择性解析数据
</code>

www#gaodaima.com来源gao@!dai!ma.com搞$$代^@码网搞代码

源码入口

<code class="language-python"># APIView类的dispatch方法中
<a href="https://www.gaodaima.com/tag/request" title="查看更多关于request的文章" target="_blank">request</a> = self.initialize_request(request, *args, **kwargs)  # 点进去

# 获取解析类
parsers=self.get_parsers(),  # 点进去

# 去类属性(局部配置) 或 配置文件(全局配置) 拿 parser_classes
return [parser() for parser in self.parser_classes]
</code>

自定义全局配置:settings.py

<code class="language-python">REST_FRAMEWORK = {
    # 全局解析配置
    "DEFAULT_PARSER_CLASSES": [
        "rest_framework.parsers.JSONParser",  # 解析json数据包
        "rest_framework.parsers.FormParser",  # 解析urlencoded数据包
        "rest_framework.parsers.MultiPartParser"  # 解析from-data数据包
    ],
}
</code>

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

<code class="language-python">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")
</code>

补充:

<code class="language-python"># 禁用 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."
}
</code>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:08 解析模块
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址