rest_framework之解析器详解 05
解析器就是服务端写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.body
1. 请求头要求:
Content-Type: application/x-www-form-urlencoded
PS: 如果请求头中的 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,]
rest_framework之解析器详解 05的更多相关文章
- Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...
- SpringBoot 默认json解析器详解和字段序列化自定义
前言 在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理 Sp ...
- SQL解析器详解
1.概述 最近,有同学留言关于SQL解析器方面的问题,今天笔者就为大家分享一下SQL解析器方便的一些内容. 2.内容 2.1 SQL解析器是什么? SQL解析与优化是属于编辑器方面的知识,与C语言这类 ...
- GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]
[OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...
- C编译器、链接器、加载器详解
摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...
- JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- # Okhttp解析—Interceptor详解
Okhttp解析-Interceptor详解 Interceptor可以说是okhttp的精髓之一,Okhttp重写请求/响应.重试.缓存响应等操作,基本都是在各个Interceptor中完成的,上篇 ...
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...
- HiveSQL解析过程详解 | 学步园
HiveSQL解析过程详解 | 学步园 http://www.xuebuyuan.com/2210261.html
随机推荐
- 【R】用 ggplot2 绘制漂亮的分级统计地图
最近我一直尝试利用R绘制地图,我从网上找到了上百种不同的实现方法,然而其中却没有适用于我的数据的方法.最终,我从以下几个博客[1]中找到了灵感.我在整合这些资源的基础上,通过不断的试验和修正得到了一个 ...
- Spring 4 官方文档学习(六)核心技术之Spring AOP
目录 1.介绍 1.1.AOP概念 1.2.Spring AOP 能力 和 目标 1.2.1.简介 1.2.2.@AspectJ 支持 1.2.3.声明一个aspect 例子 1.2.4.声明advi ...
- MySQl安装全解
这是第二次安装MySql了.第一次安装花了几个小时,理解安装的每一个页面,这次光寻找安装包就找了几个.因此感觉有必要做一次全面的安装笔记.(有点浪费时间了,可是感觉非常值得)本人系统是window7. ...
- 在PADS中,大面积覆铜有3个重要概念
- 资深投资人全力反击: VC增值平台从来就不是一坨狗屎
编者注: 本文来自海外著名科技博客VentureBeat, 英文原文出自Kyle Lacy之手 ,中文版由天地会珠海分舵进行编译. 文章主要是针对前几天德国VC Christian Claussen的 ...
- 将android程序中的数据库导出到SD卡
private void copyDBToSDcrad() { String DATABASE_NAME = "数据库文件名"; String oldPath = "da ...
- foreach使用
1. 读取记录while($row=mysql_fetch_array($result)){$record[]=array( 'title'=>$row['title'], 'body'= ...
- TCP/IP协议族-----24、网络管理(SNMP)
- 件测试专家分享III GUI自动化测试相关
GUI自动化:效率为王—脚本与数据解偶 页面对象模型的核心理念是,以页面(Web Page或者Native App Page)为单位来封装页面上的空间以及控件部分操作. 而测试用力,更确切的说是操作函 ...
- testNG框架提示:Cannot find class in classpath: NewTest
selenium+Java的testNG运行时,报如下错误: org.testng.TestNGException: Cannot find class in classpath: NewTest a ...