解析器就是服务端写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的更多相关文章

  1. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  2. SpringBoot 默认json解析器详解和字段序列化自定义

    前言 在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理 Sp ...

  3. SQL解析器详解

    1.概述 最近,有同学留言关于SQL解析器方面的问题,今天笔者就为大家分享一下SQL解析器方便的一些内容. 2.内容 2.1 SQL解析器是什么? SQL解析与优化是属于编辑器方面的知识,与C语言这类 ...

  4. GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]

    [OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...

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

    摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...

  6. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  7. # Okhttp解析—Interceptor详解

    Okhttp解析-Interceptor详解 Interceptor可以说是okhttp的精髓之一,Okhttp重写请求/响应.重试.缓存响应等操作,基本都是在各个Interceptor中完成的,上篇 ...

  8. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

  9. HiveSQL解析过程详解 | 学步园

    HiveSQL解析过程详解 | 学步园   http://www.xuebuyuan.com/2210261.html

随机推荐

  1. 【R】用 ggplot2 绘制漂亮的分级统计地图

    最近我一直尝试利用R绘制地图,我从网上找到了上百种不同的实现方法,然而其中却没有适用于我的数据的方法.最终,我从以下几个博客[1]中找到了灵感.我在整合这些资源的基础上,通过不断的试验和修正得到了一个 ...

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

  3. MySQl安装全解

    这是第二次安装MySql了.第一次安装花了几个小时,理解安装的每一个页面,这次光寻找安装包就找了几个.因此感觉有必要做一次全面的安装笔记.(有点浪费时间了,可是感觉非常值得)本人系统是window7. ...

  4. 在PADS中,大面积覆铜有3个重要概念

  5. 资深投资人全力反击: VC增值平台从来就不是一坨狗屎

    编者注: 本文来自海外著名科技博客VentureBeat, 英文原文出自Kyle Lacy之手 ,中文版由天地会珠海分舵进行编译. 文章主要是针对前几天德国VC Christian Claussen的 ...

  6. 将android程序中的数据库导出到SD卡

    private void copyDBToSDcrad() { String DATABASE_NAME = "数据库文件名"; String oldPath = "da ...

  7. foreach使用

    1. 读取记录while($row=mysql_fetch_array($result)){$record[]=array(    'title'=>$row['title'], 'body'= ...

  8. TCP/IP协议族-----24、网络管理(SNMP)

  9. 件测试专家分享III GUI自动化测试相关

    GUI自动化:效率为王—脚本与数据解偶 页面对象模型的核心理念是,以页面(Web Page或者Native App Page)为单位来封装页面上的空间以及控件部分操作. 而测试用力,更确切的说是操作函 ...

  10. testNG框架提示:Cannot find class in classpath: NewTest

    selenium+Java的testNG运行时,报如下错误: org.testng.TestNGException: Cannot find class in classpath: NewTest a ...