Django REST framework-API指南01-Requests 原创翻译

来源:互联网 发布:openwrt 网络设置 编辑:程序博客网 时间:2024/05/16 10:49

python技术交流群332680349,资源分享,技术交流。

01-请求

如果您正在使用基于REST的Web服务,您应该忽略request.POST。
出自Malcom Tredinnick,Django开发团队

REST框架的Request类扩展了Django标准HttpRequest,增加了对REST框架灵活请求解析和请求认证的支持。

02-请求解析

REST框架的Request对象提供灵活的请求解析,允许您以与通常处理表单数据相同的方式处理JSON数据或其他媒体类型的请求。

数据属性(.data)

request.data返回请求正文的解析内容。这与标准request.POST和request.FILES属性相似,除以下内容:

  • 它包括所有解析的内容,包括文件和非文件输入。
  • 它支持解析HTTP方法的内容POST,这意味着您可以访问内容PUT和PATCH请求。
  • 它支持REST框架的灵活请求解析,而不仅仅是支持表单数据。例如,您可以以处理传入表单数据的方式处理传入的JSON数据。
    有关详细信息,请参阅解析器文档。http://www.django-rest-framework.org/api-guide/parsers/

参数查询集(.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响应。

03-内容协商

该请求公开了一些属性,允许您确定内容协商阶段的结果。这允许您实现行为,例如为不同的媒体类型选择不同的序列化方案。

接收渲染器(.accepted_renderer)

由内容协商阶段选择出来渲染器实例。

接收媒体类型(.accepted_media_type)

表示内容协商阶段接受的媒体类型的字符串。

04-身份验证

REST框架提供灵活的每个请求身份验证,使您能够:

  • 对API的不同接口使用不同的身份验证策略。
  • 支持使用多种认证策略。
  • 提供与传入请求相关联的用户和令牌信息。

用户(.user)

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设置。
通常您不需要访问此属性。

05-浏览器增强功能

REST框架支持的几个浏览器增强功能,例如基于浏览器的PUT,PATCH和DELETE形式。

方法属性(.method)

request.method返回请求的HTTP方法的大写字符串表表述。

基于浏览器的PUT,PATCH而DELETE形式是显示的支持。

有关更多信息,请参阅浏览器增强文档。

内容类型(.content_type)

request.content_type,返回一个表示HTTP请求主体的媒体类型的字符串对象,如果没有提供媒体类型,则返回一个空字符串。

通常您通常不需要直接访问请求的内容类型,因为您通常将依赖于REST框架的默认请求解析行为。

如果您确实需要访问请求的内容类型,则应优先使用.content_type该属性优先于request.META.get(‘HTTP_CONTENT_TYPE’),因为它为基于浏览器的非表单内容提供显示支持。

有关更多信息,请参阅浏览器增强文档。

流(.stream)

request.stream 返回表示请求主体内容的流。

通常您不需要直接访问请求的内容,因为您通常将依赖于REST框架的默认请求解析行为。

06-标准的HTTP请求属性

由于REST框架Request扩展了Django HttpRequest,所有其他标准属性和方法也可用。例如request.META,request.session字典可以正常使用。

请注意,由于实现原因,Request类不会继承HttpRequest类,而是使用组合扩展类。

阅读全文
0 0