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编写一个模仿CPU工作的程序
Apr 16 Python
Python读取网页内容的方法
Jul 30 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
通俗讲解python 装饰器
Sep 07 Python
Python 串口通信的实现
Sep 29 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
asyncio异步编程之Task对象详解
Mar 13 Python
bat批处理之字符串操作的实现
Mar 16 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
简单了解Python3里的一些新特性
2019/07/13 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
如何一键升级Python所有包
2020/11/05 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
毕业生找工作的自我评价
2013/10/18 职场文书
数控专业推荐信范文
2013/12/02 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
党员评议自我评价
2015/03/03 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python