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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
Python中的进程分支fork和exec详解
Apr 11 Python
深入解析Python中的WSGI接口
May 11 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
python多任务及返回值的处理方法
Jan 22 Python
python实现爬山算法的思路详解
Apr 09 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
PyCharm如何导入python项目的方法
Feb 06 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
详解Python为什么不用设计模式
Jun 24 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来自动调用不同服务器上的flash
2006/10/09 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
Python中的super()方法使用简介
2015/08/14 Python
Python循环结构的应用场景详解
2019/07/11 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
高中自我鉴定
2013/12/20 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
运动会广播稿500字
2014/01/28 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
军训教官感言
2014/03/02 职场文书
品牌宣传方案
2014/03/21 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书