请求-Django REST框架
请求
如果你在做基于休息的网络服务.你应该忽略请求。
Malcom TredinnickDjango开发商组
REST框架Request
类扩展标准。HttpRequest
添加对REST框架的灵活请求解析和请求身份验证的支持。
请求解析
REST框架的请求对象提供灵活的请求解析,允许您使用JSON数据或其他媒体类型处理请求,其方式与通常处理表单数据的方式相同。
.数据
request.data
返回请求主体的解析内容。这与标准类似。request.POST
和request.FILES
属性除外:
- 它包括所有已解析的内容,包括文件和非文件投入。
- 它支持解析除HTTP之外的HTTP方法的内容
POST
,这意味着您可以访问PUT
和PATCH
请求。 - 它支持REST框架灵活的请求解析,而不仅仅是支持表单数据。例如,您可以以处理传入表单数据的方式处理传入的JSON数据。
有关详细信息,请参阅解析器文档.
.query_params
request.query_params
的同义词。request.GET
.
为了代码中的清晰性,我们建议使用request.query_params
而不是Django的标准request.GET
...这样做将有助于使您的代码库更加正确和明显--任何HTTP方法类型都可能包含查询参数,而不仅仅是GET
请求。
解析器
这个APIView
类或@api_view
装饰器将确保此属性自动设置为Parser
实例,基于parser_classes
设置为视图或基于DEFAULT_PARSER_CLASSES
背景。
您通常不需要访问此属性。
注:如果客户端发送格式错误的内容,则访问request.data
可能引发ParseError
...默认情况下REST框架的APIView
类或@api_view
装饰器将捕获错误并返回400 Bad Request
回应。
如果客户端发送的请求具有无法解析的内容类型,则UnsupportedMediaType
异常将引发,默认情况下该异常将被捕获并返回415 Unsupported Media Type
回应。
内容协商
请求公开一些允许您确定内容协商阶段结果的属性。这允许您实现行为,例如为不同的媒体类型选择不同的序列化方案。
接受渲染器
内容协商阶段选择的呈现器实例。
接受媒体类型
表示内容协商阶段接受的媒体类型的字符串。
认证
REST框架提供灵活的、按请求进行的身份验证,使您能够:
- 对API的不同部分使用不同的身份验证策略。
- 支持使用多个身份验证策略。
- 提供与传入请求相关联的用户和令牌信息。
.用户
request.user
的实例。django.contrib.auth.models.User
,尽管行为取决于所使用的身份验证策略。
如果请求未经身份验证,则默认值为request.user
是django.contrib.auth.models.AnonymousUser
.
有关详细信息,请参阅认证文件.
.奥斯
request.auth
返回任何其他身份验证上下文。确切的行为request.auth
取决于所使用的身份验证策略,但通常它可能是对请求进行身份验证的令牌的实例。
如果请求未经身份验证,或者如果没有其他上下文,则默认值为request.auth
是None
.
有关详细信息,请参阅认证文件.
.认证者
这个APIView
类或@api_view
装饰器将确保此属性自动设置为认证
实例,基于authentication_classes
设置为视图或基于DEFAULT_AUTHENTICATORS
背景。
您通常不需要访问此属性。
注:你可能会看到WrappedAttributeError
调用.用户
或.奥斯
财产。这些错误起源于作为标准的身份验证器。AttributeError
但是,有必要将它们作为不同的异常类型重新引发,以防止它们被外部属性访问所抑制。Python不会意识到AttributeError
起源于身份验证器,并将相反地假设请求对象没有.用户
或.奥斯
财产。认证者需要被修复。
浏览器增强
REST框架支持一些浏览器增强功能,例如基于浏览器的增强。PUT
, PATCH
和DELETE
表格。
.方法
request.method
返回超感知请求的HTTP方法的字符串表示形式。
基于浏览器的PUT
, PATCH
和DELETE
表单被透明地支持。
有关更多信息,请参见浏览器增强文档.
内容类型
request.content_type
,返回一个表示HTTP请求正文的媒体类型的String对象,或者如果没有提供媒体类型,则返回一个空字符串。
您通常不需要直接访问请求的内容类型,因为通常您将依赖REST框架的默认请求解析行为。
如果确实需要访问请求的内容类型,则应使用内容类型
属性优先于使用request.META.get('HTTP_CONTENT_TYPE')
,因为它为基于浏览器的非表单内容提供了透明的支持。
有关更多信息,请参见浏览器增强文档.
溪流
request.stream
返回表示请求主体的内容的流。
您通常不需要直接访问请求的内容,因为通常您将依赖REST框架的默认请求解析行为。
标准HttpRequest属性
作为REST框架的Request
扩展Django‘sHttpRequest
,所有其他标准属性和方法也是可用的。例如,request.META
和request.session
字典可以正常使用。
注意,由于实现原因,Request
类不继承HttpRequest
类,而是使用组合扩展类。
网友评论