Django Rest framework解析器和渲染器详解


Posted in Python onJuly 25, 2019

解析器

解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程.

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

Content-type:用于声明我给你传的是什么类型的数据

  • application/x-ww-form-urlencoded 表单数据类型
  • multipart/form-data 文件
  • application/json(比如:request.body)
  • Accept:用于声明我能解析什么样的数据类型

Django中的解析器

我们的请求进来后,请求体中的数据是保存在request.body中的.

这就说明:==解析器会把解析好的数据放入request.body中.==

我们在视图中打印request的类型,便可知道request是WSGIRequest这个类的.

我们可以看下这个类的源码,我们是这样拿到request.POST数据的:

Django Rest framework解析器和渲染器详解

Django Rest framework解析器和渲染器详解

application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件.

multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传.

一个解析到request.POST中,一个解析到request.FILES中.

也就是说,在Django中我们之所以能在request中得到各种数据类型,是因为我们使用了这些解析器.

DRF中的解析器

DRF的请求数据都在request.data中.

所以,我们就来看Request类中的data:

Django Rest framework解析器和渲染器详解

Django Rest framework解析器和渲染器详解

Django Rest framework解析器和渲染器详解

Django Rest framework解析器和渲染器详解

Django Rest framework解析器和渲染器详解

Django Rest framework解析器和渲染器详解

得到解析器后,调用解析器里的parse方法:

Django Rest framework解析器和渲染器详解

到这里,我们再看下DRF配置的默认的解析器的类都有哪些:

Django Rest framework解析器和渲染器详解

DEF支持Json、Form表单的请求,包括多种文件类型的数据:

Django Rest framework解析器和渲染器详解

我们也可以再视图中配置视图级别的解析器:

Django Rest framework解析器和渲染器详解


DRF中的渲染器

渲染器为我们友好地展示数据.

DRF为我们提供的渲染器有:

Django Rest framework解析器和渲染器详解

一个是Json的,一个是浏览器的.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
和孩子一起学习python之变量命名规则
May 27 Python
一百多行python代码实现抢票助手
Sep 25 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Django密码存储策略分析
Jan 09 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
Python如何将字符串转换为日期
Jul 31 Python
Python为何不支持switch语句原理详解
Oct 21 Python
Python中常见的导入方式总结
May 06 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 #Python
Django MEDIA的配置及用法详解
Jul 25 #Python
Django打印出在数据库中执行的语句问题
Jul 25 #Python
python requests指定出口ip的例子
Jul 25 #Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 #Python
Python使用指定端口进行http请求的例子
Jul 25 #Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 #Python
You might like
IIS6的PHP最佳配置方法
2007/03/19 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python 文件操作的详解及实例
2017/09/18 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
对python3新增的byte类型详解
2018/12/04 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
Python转换时间的图文方法
2019/07/01 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
python中reload重载实例用法
2020/12/15 Python
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
公职人员索取回扣检举信
2014/04/04 职场文书
挂靠协议书范本
2014/04/22 职场文书
党支部季度考核意见
2015/06/02 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
银行工作心得体会范文
2016/01/23 职场文书