Django REST framework API 指南(1):请求
Django REST framework API 指南(2):响应
Django REST framework API 指南(3):视图
Django REST framework API 指南(4):通用视图
Django REST framework API 指南(5):视图集
Django REST framework API 指南(6):路由
Django REST framework API 指南(7):解析

官方原文链接

解析器

REST framework 包含许多内置的解析器类,允许接受各种媒体类型(media types)的请求。还支持自定义解析器,这使你可以灵活地设计 API 接受的媒体类型。

如何确定使用哪个解析器

视图的有效解析器集始终定义为类列表。当访问 request.data 时,REST framework 将检查传入请求的 Content-Type ,并确定使用哪个解析器来解析请求内容。

注意:在开发客户端应用程序时,请务必确保在 HTTP 请求中发送数据时设置了 Content-Type
如果你不设置 content type,大多数客户端将默认使用 'application / x-www-form-urlencoded' ,这可能不是你想要的。 例如,如果你使用 jQuery 和 .ajax() 方法发送 json 数据,则应确保包含 contentType:'application/json' 设置。

设置解析器

可以使用 DEFAULT_PARSER_CLASSES 设置默认的全局解析器。例如,以下设置将只允许带有 JSON 内容的请求,而不是默认的 JSON 或表单数据。

REST_FRAMEWORK = {'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser',)
}
复制代码

还可以在基于类(API​​View )的视图上设置单个视图或视图集的解析器。

from rest_framework.parsers import JSONParser
from rest_framework.response import Response
from rest_framework.views import APIViewclass ExampleView(APIView):"""A view that can accept POST requests with JSON content."""parser_classes = (JSONParser,)def post(self, request, format=None):return Response({'received data': request.data})
复制代码

或者和 @api_view 装饰器一起使用。

from rest_framework.decorators import api_view
from rest_framework.decorators import parser_classes
from rest_framework.parsers import JSONParser@api_view(['POST'])
@parser_classes((JSONParser,))
def example_view(request, format=None):"""A view that can accept POST requests with JSON content."""return Response({'received data': request.data})
复制代码

API 参考

JSONParser

解析 JSON 请求内容。

.media_typeapplication/json

FormParser

解析 HTML 表单内容。request.data 是一个 QueryDict 字典,包含所有表单参数。

通常需要同时使用 FormParserMultiPartParser,以完全支持 HTML 表单数据。

.media_typeapplication/x-www-form-urlencoded

MultiPartParser

解析文件上传的 multipart HTML 表单内容。 request.data 是一个 QueryDict(其中包含表单参数和文件)。

通常需要同时使用 FormParserMultiPartParser,以完全支持 HTML 表单数据。

.media_typeapplication/form-data

FileUploadParser

解析文件上传内容。 request.data 是一个 QueryDict (只包含一个存有文件的 'file' key)。

如果与 FileUploadParser 一起使用的视图是用 filename URL 关键字参数调用的,那么该参数将用作文件名。

如果在没有 filename URL 关键字参数的情况下调用,则客户端必须在 Content-Disposition HTTP header 中设置文件名。例如 Content-Disposition: attachment; filename=upload.jpg

.media_type*/*

请注意:

  • FileUploadParser 用于本地客户端,可以将文件作为原始数据请求上传。对于基于 Web 的上传,或者对于具有分段上传支持的本地客户端,您应该使用 MultiPartParser 解析器。
  • 由于此解析器的 media_type 与任何 content type 都匹配,因此 FileUploadParser 通常应该是在 API 视图上设置的唯一解析器。
  • FileUploadParser 遵循 Django 的标准 FILE_UPLOAD_HANDLERS 设置和 request.upload_handlers 属性。有关更多详细信息,请参阅 Django 文档。

基本用法示例:

# views.py
class FileUploadView(views.APIView):parser_classes = (FileUploadParser,)def put(self, request, filename, format=None):file_obj = request.data['file']# ...# do some stuff with uploaded file# ...return Response(status=204)# urls.py
urlpatterns = [# ...url(r'^upload/(?P<filename>[^/]+)$', FileUploadView.as_view())
]
复制代码

自定义解析

要实现自定义解析器,应该继承 BaseParser,设置 .media_type 属性并实现 .parse(self,stream,media_type,parser_context) 方法。

该方法应该返回将用于填充 request.data 属性的数据。

传递给 .parse() 的参数是:

stream

表示请求正文的流式对象。

media_type

可选。如果提供,则这是传入请求内容的 media type。

根据请求的 Content-Type: header,可以比渲染器的 media_type 属性更具体,并且可能包含 media type 参数。比如 "text/plain; charset=utf-8"

parser_context

可选。如果提供,则该参数将是一个包含解析请求内容可能需要的任何其他上下文的字典。

默认情况下,这将包括以下 key:viewrequestargskwargs

举个栗子

以下是一个示例纯文本解析器,它将使用表示请求正文的字符串填充 request.data 属性。

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()
复制代码

第三方包

以下是可用的第三方包。

YAML

REST framework YAML 提供 YAML 解析和渲染支持。它以前直接包含在 REST framework 包中,现在作为第三方包。

安装和配置

使用pip安装。

$ pip install djangorestframework-yaml
复制代码

修改 REST framework settings。

REST_FRAMEWORK = {'DEFAULT_PARSER_CLASSES': ('rest_framework_yaml.parsers.YAMLParser',),'DEFAULT_RENDERER_CLASSES': ('rest_framework_yaml.renderers.YAMLRenderer',),
}
复制代码

XML

REST Framework XML 提供了一种简单的非正式 XML 格式。它以前直接包含在 REST framework 包中,现在作为第三方包。

安装和配置

使用pip安装。

$ pip install djangorestframework-xml
复制代码

修改 REST framework settings。

REST_FRAMEWORK = {'DEFAULT_PARSER_CLASSES': ('rest_framework_xml.parsers.XMLParser',),'DEFAULT_RENDERER_CLASSES': ('rest_framework_xml.renderers.XMLRenderer',),
}
复制代码

MessagePack

CamelCase JSON

友情提示

配合源码阅读效果更佳哦

Django REST framework API 指南(7):解析相关推荐

  1. Django REST framework API 指南(2):响应

    Django REST framework API 指南(1):请求 Django REST framework API 指南(2):响应 Django REST framework API 指南(3 ...

  2. Django REST framework API 指南(12):验证器

    官方原文链接 本系列文章 github 地址 转载请注明出处 验证器 大多数情况下,您在 REST framework 中处理验证时,只需依赖默认的字段验证,或者在序列化类或字段类上编写明确的验证方法 ...

  3. Django REST framework API 指南(11):序列化·关系

    官方原文链接 本系列文章 github 地址 转载请注明出处 Serializer 关系 关系字段用于表示模型关系. 它们可以应用于 ForeignKey,ManyToManyField 和 OneT ...

  4. Django REST framework API 指南(25):状态码

    官方原文链接 本系列文章 github 地址 转载请注明出处 状态码 不建议在你的响应中使用裸露(直接使用数字)的状态码. REST framework 包含一组命名常量,你可以使用它们使代码更加清晰 ...

  5. Django REST framework API开发

    REST 介绍 RESTful API 设计 实现API的两种方式 FBV 视图函数 urlpatterns = [url(r'^user/$', views.user),url(r'^user/ad ...

  6. Django REST Framework API Guide 01

    之前按照REST Framework官方文档提供的简介写了一系列的简单的介绍博客,说白了就是翻译了一下简介,而且翻译的很烂.到真正的生产时,就会发现很鸡肋,连熟悉大概知道rest framework都 ...

  7. Django REST Framework API Guide 02

    本节大纲 1.Generic Views 2.ViewSets  1.Generic Views CBV的主要的一个优点就是极大的允许了对于代码的从用.自然,rest framework取其优势,提供 ...

  8. Django REST Framework API Guide 07

    本节大纲 1.Permissions 2.Throttling Permissions 权限是用来授权或者拒绝用户访问API的不同部分的不同的类的.基础的权限划分 1.IsAuthenticated ...

  9. Django REST framework学习笔记

    文章目录 1. API接口开发 1.1 获取数据的接口 1.2 添加数据的接口 1.3 更新数据的接口 1.4 删除数据的接口 2. API字段的定制 2.1 别名字段 2.2 字段格式化 2.3 字 ...

  10. django restful 请求_利用 Django REST framework 构建 RESTful Web API

    利用 Django REST framework 构建 RESTful Web API 终于到了动手操作的环节啦,这一节,我们以师生管理系统为例,带领大家搭建一套 framework Web API. ...

最新文章

  1. log4j 日志限制大小 拆分成30个 不按日期分日志 按大小拆分 按日期产生...
  2. 菜鸟学python 哪吒_Python 学习之路 (前言)
  3. Linux学习笔记05
  4. 转一个后缀数组的简单总结:
  5. Qt工作笔记-使用hiredis连接及查询Redis
  6. iPhone 13的新对手?小米历史上最好看的手机即将发布
  7. SVN如何迁移到Git?
  8. 设计模式:模板(Template)模式
  9. HTML5期末大作业:腾讯游戏网站设计——腾讯游戏官网(13页) HTML+CSS+JavaScript web网页设计与开发
  10. logistic回归分析优点_逻辑回归算法的优缺点
  11. ubuntu中查看IP地址命令
  12. gnu开源代码_GNU Health扩展了对Raspberry Pi的支持,Megadeth的吉他手使用了开源原则,以及更多的开源新闻。...
  13. Python20190206 解不定方程并绘制散点图标记解
  14. armbian清理_N1的ArmbianOpenMediaVault笔记
  15. 写给夏燕第十一个男人
  16. Markdown/LaTeX数学符号、公式大全(一)
  17. 想使用hexo(个人博客的方案) Next(主题)搭建一个个人的照片墙
  18. python半径为2.11的圆球的体积_Python科学计算神器之Numpy-2
  19. 机器学习理论: PAC学习
  20. 九问 Gopher China 2020 讲师之毛康力:从 Go 1.0 使用至今的鲜肉老司机

热门文章

  1. Atitti 编程语言高级 api 与高级知识 堆栈api 异常api Meta anno注解元数据api Ref 反射api Database meta api 字节码库如果你正在编写一个框架或者
  2. atitit.api设计 方法 指南 手册 v2 q929.docx
  3. paip.互联网产品要成功的要素
  4. paip.重装系统需要备份的资料总结..v2.0 cad
  5. paip.python错误解决5
  6. Rust: match 与ref
  7. Rust: ,clone,Box,Arc 的address
  8. 【路径规划】基于matlab灰狼算法求解机器人栅格地图路径规划问题【含Matlab源码 1761期】
  9. 【语音隐写】基于matlab GUI LSB语音信号数字水印嵌入提取(带面板)【含Matlab源码 1676期】
  10. 2021年全国研究生数学建模指导