rest framework Request
要求
如果你正在做基于REST的Web服务的东西......你应该忽略request.POST。
-马尔科姆Tredinnick,Django开发组
REST框架的Request
类继承了标准HttpRequest
的REST架构灵活的请求解析和请求认证,加入支持。
请求解析
REST框架的请求对象提供灵活的请求的解析,可以让你以同样的方式,你通常会处理表单数据和JSON数据或其他媒体的治疗请求。
。数据
request.data
返回请求主体的被分析的内容。这是类似的标准request.POST
和request.FILES
不同的是属性:
- 它包括所有分析的内容,包括文件和非文件输入。
- 它支持解析的比其他的HTTP方法的内容
POST
,这意味着您可以访问的内容PUT
和PATCH
要求。 - 它支持REST架构灵活的请求解析,而不仅仅是支持表单数据。例如,您可以以同样的方式,你处理传入的表格数据处理传入的JSON数据。
欲了解更多详细信息,请参阅解析器文档。
.query_params
request.query_params
是更多的正确命名的代名词request.GET
。
为了您的代码中清楚起见,我们建议使用request.query_params
,而不是Django的标准request.GET
。这样做将有助于保持你的代码更正确,更明显的-任何HTTP方法类型可包括查询参数,而不只是GET
请求。
.parsers
在APIView
类或@api_view
装饰将确保这个属性被自动设置为列表Parser
实例的基础上,parser_classes
对视图设置或基于该DEFAULT_PARSER_CLASSES
设置。
你通常不会需要访问这个属性。
注:如果客户端发送格式不正确的内容,然后访问request.data
可能会产生一种ParseError
。默认情况下,REST框架的APIView
类或@api_view
装饰将捕获错误并返回一个400 Bad Request
响应。
如果客户端发送与内容类型,它不能被解析那么的请求UnsupportedMediaType
,将引发异常,默认情况下将被捕获并返回一个415 Unsupported Media Type
响应。
内容协商
请求暴露出一些属性,使您能够确定内容协商阶段的结果。这可以让你实现的行为,如选择不同的媒体类型不同的序列化方案。
.accepted_renderer
这是由内容协商阶段选择的渲染器实例。
.accepted_media_type
表示是由内容协商阶段接受了媒体类型的字符串。
认证
REST框架提供了灵活的,每个请求验证,让您能够:
- 您的API的不同部分使用不同的身份验证策略。
- 支持使用多个认证策略。
- 提供用户和与进入请求关联令牌信息。
。用户
request.user
通常返回的实例django.contrib.auth.models.User
,虽然行为取决于所使用的认证策略。
如果请求是未经验证的默认值request.user
是一个实例django.contrib.auth.models.AnonymousUser
。
欲了解更多详细信息,请参阅验证文档。
.auth
request.auth
返回任何额外的认证环境。的确切行为request.auth
取决于所使用的认证策略,但它通常可以为令牌,该请求针对认证的一个实例。
如果该请求是未认证的,或者如果没有附加上下文存在时,默认值request.auth
是None
。
欲了解更多详细信息,请参阅验证文档。
.authenticators
在APIView
类或@api_view
装饰将确保这个属性被自动设置为列表Authentication
实例的基础上,authentication_classes
对视图设置或基于该DEFAULT_AUTHENTICATORS
设置。
你通常不会需要访问这个属性。
注意:您可能会看到一个WrappedAttributeError
调用时提出.user
或.auth
属性。这些错误来自认证为标准起源AttributeError
,然而,他们是为了防止它们被外部属性访问被抑制再提出一个不同的异常类型是必要的。Python将无法识别AttributeError
来自认证起源而会认为请求对象不具有.user
或.auth
财产。该认证将需要修复。
浏览器增强功能
REST框架支持的几个浏览器增强功能,例如基于浏览器的PUT
,PATCH
和DELETE
形式。
。方法
request.method
返回大写的请求的HTTP方法的字符串表示。
基于浏览器的PUT
,PATCH
而DELETE
形式是透明的支持。
欲了解更多信息,请参阅浏览器的增强文档。
。内容类型
request.content_type
,返回表示如果未提供媒体类型的HTTP请求的身体,或空字符串的媒体类型的字符串对象。
你不会通常需要直接访问请求的内容类型,因为你通常依靠REST框架的默认请求解析行为。
如果你确实需要访问的内容类型的请求,你应该使用.content_type
属性优先使用request.META.get('HTTP_CONTENT_TYPE')
,因为它提供了基于浏览器的无形式的内容透明的支持。
欲了解更多信息,请参阅浏览器的增强文档。
。流
request.stream
返回表示请求主体的内容流。
你不会通常需要直接访问请求的内容,你会通常依靠REST框架的默认请求解析行为。
标准的HttpRequest属性
由于REST架构的Request
扩展Django的HttpRequest
,所有其他的标准属性和方法也可提供。例如,request.META
和request.session
词典可为正常。
需要注意的是,由于执行的原因Request
类不继承HttpRequest
类,而是扩展使用组成的类。