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. 卫星还在“织网” 北斗时代尚需时日
  2. 冲上热搜的这款国产“阿法狗”,究竟是什么来头?
  3. 5月22日阿里云网络变更公告
  4. 结构之美——优先队列基本结构(四)——二叉堆、d堆、左式堆
  5. ReactOS 0.0.21从开机启动,到加载驱动的过程
  6. 洛谷P1182 数列分段`Section II`
  7. ogg replicat 进程 abend 处理
  8. Windows在当前目录(文件)打开cmd窗口
  9. Linux内核设计第四周——扒开系统调用三层皮
  10. select元素javascript常用操作(转载)
  11. 强化学习组队学习task01——基础
  12. epel安装第三方扩展源后,运行yum报错的解决方案
  13. mysql auto_inc_MySQL innodb_autoinc_lock_mode 详解
  14. python 入门教程
  15. 史上五大最光明的白帽黑客介绍 都有很大技术贡献
  16. 如何解决“'mvn' 不是内部或外部命令,也不是可运行的程序或批处理文件。”问题
  17. 麦田的守望者背景与分析
  18. 记一次macbook pro A1708更换电池的经历
  19. 模糊查询下划线“_”时查询的是全部数据
  20. VRay 3.4 for SketchUp 写实室内渲染的10个小技巧

热门文章

  1. Atitit 手机图片备份解决方案attilax总结
  2. atitit..sql update语法的词法分析,与语法ast构建
  3. paip.程序设计--扫号器跑号器结果分类设计
  4. paip.流程图的图形化编程及源码生成时序图
  5. 博弈中的 SaaS 渠道
  6. Julia : 关于Atom中的Julia代码排版
  7. 阿里云Serverless,全球第一!
  8. 机器学习笔记(二十五):支撑向量机(SVM)
  9. 【优化算法】大鼠群优化器算法(RSO)【含Matlab源码 1837期】
  10. 【故障分析】基于matlab ICA故障监测【含Matlab源码 1591期】