概述

什么是解析器?在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)相关推荐

  1. Android[中级教程]第六章 XML解析之SAX解析器

    Android[中级教程]第六章 XML解析之SAX解析器 分类: Android中级2011-10-06 01:52 125人阅读 评论(1) 收藏 举报 接上一章,这一章我们就来学习SAX解析器, ...

  2. GRPC(5):名字解析器

    上一章学习了 gRPC 截止时间,多路复用和元数据等特性,今天学习名字解析器j及其实现原理. 名字解析器(Name Resolver) 名字解析器用作将给定的服务名称解析为对应的后端 IP 地址和端口 ...

  3. rest_framework之解析器详解 05

    解析器就是服务端写api,对于前端用户发来的数据进行解析.解析完之后拿到自己能用数据. 本质就是对请求体中的数据进行解析. django的解析器 post请求过来之后,django 的request. ...

  4. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  5. Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)

    摘要: Solr除了支持常见的解析器之外,还有一些特殊用途的解析器,为了便于之后查阅,总结一下.本文整理自Solr官方文档. 解析器 说明 Standard Query Parser Solr的标准查 ...

  6. JAVA与DOM解析器基础 学习笔记

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理 ...

  7. string 转 json_手写Json解析器学习心得

    哦?从"{"开始,看来是个对象了! 一. 介绍 一周前,老同学阿立给我转了一篇知乎回答,答主说检验一门语言是否掌握的标准是实现一个Json解析器,网易游戏过去的Python入门培训 ...

  8. 解析器 java_Java高性能解析器实现思路及方法学习

    当你必须自己实现一个解析器时,你对它的期望会有很多,包括性能良好.灵活.特性丰富.方便使用,以及便于维护等等.说到底,这也是你自己的代码.在本文中,我将为你介绍在Java中实现高性能解析器的一种方式, ...

  9. XML - XML学习/XML文件解析器(C++)实现

    XML - XML学习/XML文件解析器(C++)实现 XML概述 ​ XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...

最新文章

  1. 计算机工程类高级职称,2019年工程类中高级职称都有哪些专业?
  2. datetime模块及time模块
  3. bzoj 3675: [Apio2014]序列分割
  4. C# ADO.NET
  5. 查看论坛隐藏链接_软连接与硬链接的区别
  6. 读写文件、文件方法、python2的乱码问题、python对passwd文件进行排序
  7. java中容易混淆的方法_java中容易混淆的区别
  8. 数学模型中包括多个变量的例子:称硬币
  9. 3GPP(3rd Generation Partnership Project)
  10. 盈建科弹性板6计算_YJK参数设置详细解析
  11. 欧姆龙NX1P控制器及ST编程
  12. Matlab使用for循环实现5阶乘和的计算
  13. 宝付国际一文读懂:跨境电商的外汇风险敞口(四)
  14. RFB(Receptive Field Block)
  15. [深度学习工具]·FoolNLTK 中文处理工具包使用教程
  16. python系列13:python中Path常用功能
  17. javaspringboot面试,挑战华为社招
  18. CGAL学习记录——降采样
  19. 网易2018校园招聘题目
  20. 请求第三方阿里发送验证码

热门文章

  1. 深蓝学院-视觉SLAM理论与实践-第十二期-第2章作业
  2. 我的世界服务器显示自己不在线,我的世界:自从拥有了自己的服务器,玩家的状态一天不如一天!...
  3. 视觉特效专家24点行业工作经验总结
  4. attempted to return null from a method with a primitive return type (int).
  5. 写作进度周报【人人都是产品经理:9039】
  6. 企业微信组织架构同步教程
  7. L3 Sequence
  8. Python什么都能做(二)用Python画微信新出的表情包
  9. 旺旺打标工具,淘宝搜索打标软件(含旺旺打标API接口)
  10. 漏洞篇(SQL注入一)