解析器就是服务端写api,对于前端用户发来的数据进行解析。解析完之后拿到自己能用数据。

本质就是对请求体中的数据进行解析。

django的解析器

post请求过来之后,django 的request.body一定有值,request.post不一定有值。如果想让request.post有值,必须转为QueryDict类型的值。

1.urls.py

2.views.py

运行:

打印结果:

3.导入文件    解析器类

解析器类 源码流程

4.

post有值 要求1 请求头要求:

5.请求头要求:如果请求头中的 Content-Type: application/x-www-form-urlencoded,request.POST中才有值(去request.body中解析数据)。

post有值 要求2  数据格式要求:

name=xiaoming&age=18&gender=男

form表单、ajax请求:默认都是以上这种请求头和数据格式!

如果ajax请求设置请求头为json类型,那么post则没值。body里有值。

原生的django解析器:post有无值的情况

解析器前戏:django:request.POST/ request.body1. 请求头要求:Content-Type: application/x-www-form-urlencodedPS: 如果请求头中的 Content-Type: application/x-www-form-urlencoded,request.POST中才有值(去request.body中解析数据)。2. 数据格式要求:name=xiaoming&age=18&gender=男如:a. form表单提交<form method...>input...</form>b. ajax提交$.ajax({url:...type:POST,data:{name:xiaoming,age=18} # 内部转化 name=alex&age=18&gender=男
                    })情况一:$.ajax({url:...type:POST,headers:{'Content-Type':"application/json"}data:{name:alex,age=18} # 内部转化 name=xiaoming&age=18&gender=男
                        })# body有值;POST无
                    情况二:$.ajax({url:...type:POST,headers:{'Content-Type':"application/json"}data:JSON.stringfy({name:xiaoming,age=18}) # {name:alex,age:18...}
                        })# body有值;POST无# json.loads(request.body)

rest_framework 解析器,对请求体数据进行解析

1.urls.py

2.JSONParser 解析器

from rest_framework.parsers import JSONParser

允许用户发送json数据     a. content-type: application/json     b. {name:"xiaoming",age:18}

views.py

post请求:发送 json数据

打印结果:自动解析,自己没有反序列化。

4.该请求头不支持。JSONParser 只支持 content-type: application/json

5.想要支持 这种请求头怎么办

FormParser:表示只能解析application/x-www-form-urlencoded头

views.py

源码:

运行:

打印结果:

请求进了的时候,什么时候调用解析器

request.data触发了解析器:解析流程

1.请求信息都在Request.data里

from rest_framework.request import Request

看源码:

2.data

3.解析

4.拿到所有解析器列表、用户请求头

5.循环解析器列表,取每一个解析器支持的请求头。根据解析器支持的请求头,返回到底应该用哪个解析器

6.选择解析器之后,则执行解析器的parse方法。

7.比如SONParser 解析器的解析方法。将请求数据解析出来。

请求流程

1.dispatch

2.

3.执行认证之前,先获取解析器。

4.列表生成器

5.全局配置

目前request 里面有 原生的request、解析器、认证的所有方法  3个东西

全局配置解析器

1.settings.py

如果某个视图仅仅文件上传,视图就需要单独设置解析器。局部配置解析器

# parser_classes = [JSONParser,FormParser,]

转载于:https://www.cnblogs.com/aaronthon/p/9320912.html

rest_framework之解析器详解 05相关推荐

  1. zend framework php编码规范,Zend Framework常用校验器详解

    本文实例讲述了Zend Framework常用校验器.分享给大家供大家参考,具体如下: Date日期校验器 代码:<?php require_once 'Zend/Validate/Date.p ...

  2. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  3. python布局管理_Python基础=== Tkinter Grid布局管理器详解

    本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html          @ 箬笠蓑衣 Grid(网格)布局管理器会将控件放置到一个二维的表 ...

  4. Python 装饰器详解(下)

    Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...

  5. C 编译器、链接器、加载器详解

    原文请见 C 编译器.链接器.加载器详解 0. 预编译 在编译 C++ 程序的预处理阶段,源程序中的所有常量表达式都需要首先计算并替换为对应的具体数值. C语言编译器在对源代码编译之前,还需要进一步的 ...

  6. JVM--类加载器详解

    42. JVM--类加载器详解 ● 类加载器子系统作用: 1. 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识. 2. ClassLoader只负责 ...

  7. Cesium 核心类Viewer-查看器详解

    Cesium 核心类Viewer-查看器详解 1 简介 A base widget for building applications. It composites all of the standa ...

  8. android webview epub,《webview实现epub阅读器详解》.pdf

    <webview实现epub阅读器详解>.pdf webview实现epub阅读器详解 主讲:eoe移动开发者社区 移动老师 课程地址:/course/座机电话号码72 简易epub阅读器 ...

  9. OpenGL ES _ 着色器_片断着色器详解

    OpenGL ES _ 入门_01 OpenGL ES _ 入门_02 OpenGL ES _ 入门_03 OpenGL ES _ 入门_04 OpenGL ES _ 入门_05 OpenGL ES ...

最新文章

  1. python windows系统调用_python日记第四章:python用os和sys模块进行系统调用
  2. 【深度学习】基于PyTorch的模型训练实用教程之数据处理
  3. 树莓派学习笔记—— 源代码方式安装opencv
  4. 最优化理论与算法笔记
  5. mysql pt_MySQL慢查询之pt-query-digest分析慢查询日志
  6. Time.deltaTime 含义和应用
  7. python图像识别坐标转换成g代码_python - 将坐标系导出为ESPG代码:to_epsg()或ExportToEPSG() - SO中文参考 - www.soinside.com...
  8. 使用Span T 提高C#代码的性能
  9. 黄刘生--数据结构--答案 2
  10. Python yield generator
  11. VM虚拟机的三种网络连接模式
  12. python 自动办公ppt_python自动化办公操作PPT的实现
  13. JavaScript中的onmouseover事件和onmouseout事件实例
  14. Android 蓝牙
  15. 机器学习实战(三)朴素贝叶斯 (Peter Harrington著)
  16. 【Kubernetes/docker】生成docker镜像推送到hub并在Kubernetes部署应用-20220407
  17. 嫦娥奔月(神话,非航天器)
  18. vs.net发送邮件(2.0)
  19. Oreo对A2DP codec的支持
  20. 一款免杀远控,马子体积小

热门文章

  1. java.lang.IllegalStateException: Not connected to serve
  2. C#之基本知识和语法3 - 数据类型
  3. DirectShow学习
  4. java连续输入_java – 要求用户进行多次输入
  5. 2021年8月最新sci-hub可用网址,高速稳定
  6. 翻译 | ORB: An efficient alternative to SIFT or SURF(ORB:对SIFT或SURF的一种有效选择)
  7. Matlab | Matlab从入门到放弃(6)——数组
  8. 计算机视觉招聘_香港理工大学人工智能设计实验室科研招聘
  9. java switch小程序,小程序自定义switch组件
  10. 电工结业试卷_电工电子考试试(含答案).doc