rest_framework学习之解析器(Parsers)
概述
什么是解析器?在DRF中,解析器是一个类列表,当每次接收到请求时,RDF会根据请求头中的Content-type,来指定使用哪钟解析方法去解析数据。当content-type与解析器列表均不匹配时,则会报解析失败。
我们可以在settings.py中全局设置解析器列表,如下:
REST_FRAMEWORK = {'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser',)
}
当然,我们也可以在某个视图类中指定解析器,如下:
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser, FormParserclass TestView(APIView):parser_classes = (FormParser,)def get(self, request):print("------------", request.data)return Response({"data": "zhubaoxiang"})def post(self, request):print("------------", request.data)return Response({"data": "zhaoerfang"})
需要注意的是,一般get请求中,请求头没有Content-type字段,请求体内也没有值,request.data是空字典,因此解析器也不会生效,解析器更多的是针对POST、PUT请求。
若settings.py与视图中均未设置解析器,DRF默认提供三种解析类,即:JSONParser, FormParser,MultiPartParser,每次请求根据Content-type来匹配使用哪种方式来解析。
解析器类型
DRF默认提供解析器如下:
JSONParser,解析json格式数据({"user": "zhubao"}),解析成功后,request.data类型为dict
FormParser,解析form表单格式数据(user=zhubao),解析成功后,request.data类型为QuerySet
MultiPartParser(用的较少),解析较为复杂的form表单格式数据,解析成功后,request.data类型为QuerySet
FileUploadParser,解析文件上传格式的数据,解析成功后,request.data的值为一个带有key为'file'的dict
当然,DRF也提供自定义解析器,需继承BaseParser,如下(来自DRF官网):
class PlainTextParser(BaseParser):"""Plain text parser."""media_type = 'text/plain'def parse(self, stream, media_type=None, parser_context=None):"""Simply return a string representing the body of the request."""return stream.read()
rest_framework学习之解析器(Parsers)相关推荐
- Android[中级教程]第六章 XML解析之SAX解析器
Android[中级教程]第六章 XML解析之SAX解析器 分类: Android中级2011-10-06 01:52 125人阅读 评论(1) 收藏 举报 接上一章,这一章我们就来学习SAX解析器, ...
- GRPC(5):名字解析器
上一章学习了 gRPC 截止时间,多路复用和元数据等特性,今天学习名字解析器j及其实现原理. 名字解析器(Name Resolver) 名字解析器用作将给定的服务名称解析为对应的后端 IP 地址和端口 ...
- rest_framework之解析器详解 05
解析器就是服务端写api,对于前端用户发来的数据进行解析.解析完之后拿到自己能用数据. 本质就是对请求体中的数据进行解析. django的解析器 post请求过来之后,django 的request. ...
- 学习SpringMVC——说说视图解析器
各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...
- Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)
摘要: Solr除了支持常见的解析器之外,还有一些特殊用途的解析器,为了便于之后查阅,总结一下.本文整理自Solr官方文档. 解析器 说明 Standard Query Parser Solr的标准查 ...
- JAVA与DOM解析器基础 学习笔记
要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理 ...
- string 转 json_手写Json解析器学习心得
哦?从"{"开始,看来是个对象了! 一. 介绍 一周前,老同学阿立给我转了一篇知乎回答,答主说检验一门语言是否掌握的标准是实现一个Json解析器,网易游戏过去的Python入门培训 ...
- 解析器 java_Java高性能解析器实现思路及方法学习
当你必须自己实现一个解析器时,你对它的期望会有很多,包括性能良好.灵活.特性丰富.方便使用,以及便于维护等等.说到底,这也是你自己的代码.在本文中,我将为你介绍在Java中实现高性能解析器的一种方式, ...
- XML - XML学习/XML文件解析器(C++)实现
XML - XML学习/XML文件解析器(C++)实现 XML概述 XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...
最新文章
- 计算机工程类高级职称,2019年工程类中高级职称都有哪些专业?
- datetime模块及time模块
- bzoj 3675: [Apio2014]序列分割
- C# ADO.NET
- 查看论坛隐藏链接_软连接与硬链接的区别
- 读写文件、文件方法、python2的乱码问题、python对passwd文件进行排序
- java中容易混淆的方法_java中容易混淆的区别
- 数学模型中包括多个变量的例子:称硬币
- 3GPP(3rd Generation Partnership Project)
- 盈建科弹性板6计算_YJK参数设置详细解析
- 欧姆龙NX1P控制器及ST编程
- Matlab使用for循环实现5阶乘和的计算
- 宝付国际一文读懂:跨境电商的外汇风险敞口(四)
- RFB(Receptive Field Block)
- [深度学习工具]·FoolNLTK 中文处理工具包使用教程
- python系列13:python中Path常用功能
- javaspringboot面试,挑战华为社招
- CGAL学习记录——降采样
- 网易2018校园招聘题目
- 请求第三方阿里发送验证码
热门文章
- 深蓝学院-视觉SLAM理论与实践-第十二期-第2章作业
- 我的世界服务器显示自己不在线,我的世界:自从拥有了自己的服务器,玩家的状态一天不如一天!...
- 视觉特效专家24点行业工作经验总结
- attempted to return null from a method with a primitive return type (int).
- 写作进度周报【人人都是产品经理:9039】
- 企业微信组织架构同步教程
- L3 Sequence
- Python什么都能做(二)用Python画微信新出的表情包
- 旺旺打标工具,淘宝搜索打标软件(含旺旺打标API接口)
- 漏洞篇(SQL注入一)