Requests
REST framework 的Request
类扩展了标准的 HttpRequest
,增加了对 REST framework 灵活的请求解析和请求认证的支持。
请求解析
REST framework 的Request
对象提供了灵活的请求解析,允许您使用 JSON 数据或其他媒体类型像通常处理表单数据相同的方式处理请求。
- data
request.data返回请求主题的解析内容。与request.POST和request.FILES属性类似,除了:- 它包括所有解析的内容,包括文件和非文件输入。
- 它支持解析 POST 以外的 HTTP 方法的内容,这意味着您可以访问 PUT 和 PATCH 请求的内容。
- 它支持 REST framework 的灵活请求解析,而不仅仅是支持表单数据。例如,您可以像处理传入表单数据一样处理传入的 JSON 数据。
- .query_params
request.query_params是request.GET的更准确的命名同义词。官方推荐用前者。 - .parsers
APIView 类或 @api_view 装饰器将根据视图上设置的 parser_classes 或根据 DEFAULT_PARSER_CLASSES 设置确保将此属性自动设置为 Parser 实例列表。
认证
- .user
request.user 通常会返回 django.contrib.auth.models.User 的一个实例,但其行为取决于正在使用的身份验证策略。 - .auth
request.auth 返回任何附加的认证上下文。request.auth 的确切行为取决于正在使用的身份验证策略,但它通常可能是请求通过身份验证的令牌实例。
如果请求未经身份验证,或者没有附加上下文,则 request.auth 的默认值为 None。 - .authenticators
APIView 类或 @api_view 装饰器将根据视图上设置的 authentication_classes 或根据 DEFAULT_AUTHENTICATORS 设置确保将此属性自动设置为 Authentication 实例列表。
您通常不需要访问此属性。
浏览器增强
REST framework 支持一些浏览器增强功能,例如基于浏览器的 PUT
,PATCH
和 DELETE
表单。
- .method
request.method 返回大写字符串表示的请求 HTTP 方法。
透明地支持基于浏览器的 PUT,PATCH 和 DELETE 表单。 - .content_type
request.content_type 返回表示 HTTP 请求正文的媒体类型的字符串对象,如果没有提供媒体类型,则返回空字符串。
您通常不需要直接访问请求的内容类型,因为您通常会依赖 REST framework 的默认请求解析行为。
如果确实需要访问请求的内容类型,则应该优先使用 .content_type 属性,而不是使用 request.META.get(‘HTTP_CONTENT_TYPE’),因为它为基于浏览器的非表单内容提供了透明支持。 - .stream
request.stream 返回一个代表请求主体内容的流。
您通常不需要直接访问请求的内容,因为您通常会依赖 REST framework 的默认请求解析行为。
标准的HttpRequest属性
由于 REST framework 的 Request 扩展了 Django 的 HttpRequest,所有其他标准属性和方法也可用。例如 request.META 和 request.session 字典可以正常使用。
请注意,由于实现原因,Request 类不会从 HttpRequest 类继承,而是使用组合扩展类。