RESR API (一)之Requests
Requests
如果您正在做基于REST的Web服务,您应该忽略request.POST。
- Malcom Tredinnick,Django开发团队
REST框架的Request
类扩展了标准的HttpRequest
,增加了对REST框架请求解析和请求认证的支持。
Request parsing
REST框架的Request对象提供了灵活的请求解析,允许您以与通常处理表单数据相同的方式处理JSON数据或其他媒体类型的请求。(REST framework's Request objects provide flexible request parsing that allows you to treat requests with JSON data or other media types in the same way that you would normally deal with form data.)
.data
request.data
返回请求体的解析内容。这与标准的request.POST
和request.FILES
属性相似,除了:
- 它包括所有解析的内容,包括文件和非文件输入。
- 它支持解析除
POST
以外的HTTP方法的内容,这意味着您可以访问PUT
和PATCH
请求的内容。 - 它支持REST框架的灵活的请求解析,而不只是支持表单数据。例如,您可以像处理表单数据那样处理JSON数据。
有关详细信息,请参阅解析器文档。
.query_params
request.query_params
是request.GET
的一个同义词,但表达的含义比request.GET更准确。
建议使用request.query_params
,而不使用Django标准的request.GET
。这样有助于让代码更准确和可读 - 因为任何HTTP方法类型可能包括query参数,而不仅仅是GET
请求。
.parsers
The APIView
class or @api_view
decorator will ensure that this property is automatically set to a list of Parser
instances, based on the parser_classes
set on the view or based on the DEFAULT_PARSER_CLASSES
setting.
通常您不需要访问此属性。
注意:如果客户端发送的内容格式不正确,则访问request.data
可能会抛出ParseError
。默认情况下,REST框架的APIView
类或@api_view
装饰器将捕获错误并返回400 Bad Request
响应。
如果客户端发送的内容的类型不能被解析,那么将会抛出UnsupportedMediaType
异常,默认情况下会被捕获并返回415 Unsupported Media Type
响应。
Content negotiation
request公开了一些属性,允许您决定 the content negotiation stage 的结果。这允许您实现一些行为,例如为不同的媒体类型选择不同的序列化方案。
.accepted_renderer
由 the content negotiation stage 选择的 renderer实例。
.accepted_media_type
由 the content negotiation stage 接受的一个表示媒体类型的字符串。
Authentication
REST框架提供灵活的、per-request 的身份验证,使您能够:
- 对API的不同部分使用不同的身份验证策略。
- 支持使用多种认证策略。
- 提供与传入请求相关联的用户和token信息。
.user
request.user
通常返回一个django.contrib.auth.models.User
实例,尽管行为取决于正在使用的身份验证策略。
如果请求未经身份验证,request.user
默认值为request.user
django.contrib.auth.models.AnonymousUser
的一个实例。
有关详细信息,请参阅认证文档。
.auth
request.auth
返回任何其他的身份验证上下文。request.auth
确切的行为取决于正在使用的身份验证策略,但它通常是被认证的请求token的一个实例。
如果该请求是未认证的或者不存在附加的上下文,request.auth
的默认为None
。
有关详细信息,请参阅认证文档。
.authenticators
The APIView
class or @api_view
decorator will ensure that this property is automatically set to a list of Authentication
instances, based on the authentication_classes
set on the view or based on the DEFAULT_AUTHENTICATORS
setting.
通常您不需要访问此属性。
Browser enhancements
REST框架支持的几个浏览器增强功能,例如基于浏览器的PUT
,PATCH
和DELETE forms
。
.method
request.method
以大写字符串的形式返回request 的HTTP方法。
基于浏览器的PUT
,PATCH
而DELETE
forms 显然被支持。
有关更多信息,请参阅浏览器增强文档。
.content_type
request.content_type
返回一个表示HTTP请求体媒体类型的字符串对象,如果没有提供媒体类型,则返回一个空字符串。
通常您不需要直接访问请求的内容类型,因为您通常依赖于REST框架的默认请求解析行为。
如果您确实需要访问请求的内容类型,则应优先使用.content_type
属性而不是request.META.get('HTTP_CONTENT_TYPE')
,因为它为基于浏览器的非表单内容提供transparent 支持。
有关更多信息,请参阅浏览器增强文档。
.stream
request.stream
返回一个表示请求体内容的流。
通常您不需要直接访问请求的内容,因为您通常将依赖于REST框架的默认请求解析行为。
标准HttpRequest属性
Note that due to implementation reasons the Request
class does not inherit from HttpRequest
class, but instead extends the class using composition.
RESR API (一)之Requests的更多相关文章
- RESR API (三)之Views
Class-based Views Django's class-based views are a welcome departure from the old-style views. - Rei ...
- RESR API (二)之Responses
Responses 与基本的HttpResponse对象不同,TemplateResponse对象保留 the details of the context that was provided by ...
- [py]requests+json模块处理api数据,flask前台展示
需要处理接口json数据,过滤字段,处理字段等. 一大波json数据来了 参考: https://stedolan.github.io/jq/tutorial/ https://api.github. ...
- 从0开始学爬虫10之urllib和requests库与github/api的交互
urllib库的使用 # coding=utf-8 import urllib2 import urllib # htpbin模拟的环境 URL_IP="http://10.11.0.215 ...
- Python-第三方库requests详解
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...
- Getting Started with ASP.NET Web API 2 (C#)
By Mike Wasson|last updated May 28, 2015 7556 of 8454 people found this helpful Print Download Com ...
- [转载]Python-第三方库requests详解
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...
- HttpClient与APS.NET Web API:请求内容的压缩与解压
首先说明一下,这里的压缩与解压不是通常所说的http compression——那是响应内容在服务端压缩.在客户端解压,而这里是请求内容在客户端压缩.在服务端解压. 对于响应内容的压缩,一般Web服务 ...
- Requests:Python HTTP Module学习笔记(二)(转)
在上一篇日志中对Requests做了一个整体的介绍,接来下再介绍一些高级的用法,主要资料还是翻译自官网的文档,如有错漏,欢迎指正. 参考资料:http://docs.python-requests.o ...
随机推荐
- 爬虫获取网页数据,报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start by
https://blog.csdn.net/hj_xy_0705/article/details/85011072
- Laravel5学习
[1]缓存问题 laravel中使用的配置文件,都会放在config目录下面,当变更某个参数的时候,如果发现不生效,可以在命令行下面执行 php artisan config:clear 命令才清除 ...
- 应急响应中find命令总结
在应急响应中,我们经常会使用find命令来查找系统中被黑客修改过的文件,或者被上传的木马后门文件,灵活使用find命令可以达到事半功倍的效果,现总结下使用技巧 举例,查找最近被更改的jsp文件 fin ...
- [工具] BurpSuite--Scanner功能
BurpSuite--Scanner功能 0x00 配置 Scanner有四个选项 Result -- 展示扫描结果 Scan queue -- 显示扫描的队列 Live scanning -- 我们 ...
- robotframework ride报错 Keyword 'BuiltIn.Log' expected 1 to 5 arguments, got 12.
错误原因,else和else if使用了小写,必须使用大写才能识别到.
- 转载:网络编程 socket 可读可写条件判断
转自:http://blog.csdn.net/majianfei1023/article/details/45788591 要了解socket可读可写条件,我们先了解几个概念:1.接收缓存区低水位标 ...
- pyqt5-QFrame边框样式
继承 QObject-->QWidget-->QFrame 是一个基类, 可以选择直接使用,主要是用来控制一些边框样式:例如:凸起.凹下.阴影.线宽 QFrame对象效果对照图: im ...
- 19. ClustrixDB 执行计划解读
EXPLAIN语句用于显示ClustrixDB查询优化器(也称为Sierra)如何执行INSERT.SELECT.UPDATE和DELETE语句.EXPLAIN的输出有三列: Operation - ...
- css @keyframes属性 语法
css @keyframes属性 语法 @keyframes是什么?直线电机生产厂家 @keyframes是CSS的一种规则,可以用来定义CSS动画的一个周期的行为,创建简单的动画. 作用:通过 @k ...
- 当在本地磁盘服务(Windows)中无法删除指定分区时的解决方案
有时候,我们在使用Windows管理磁盘分区时,可能会出现部分分区无法删除的情况,也就是说右键快捷菜单中没有删除卷的操作项. 此时,我们可以按照如下的步骤进行操作即可完成: Step 1: 以管理员身 ...