Requests
REST framework的request继承了标准的HttpRequest,并在其基础上增加了对REST framework灵活的请求解析和认证的支持。
Request parsing 请求的解析转换
REST framework的Request对象为你提供了非常灵活的解析方式,因此,你可以像通常处理表单数据一样去处理request里的JSON数据和其他媒体类型数据。
以下是具体属性说明
.data:
request.data返回的是request body里的内容经过解析后的结果。它的属性和request.POST以及request.FILE的属性基本是相同的。下面是它几点特殊的地方:
- 它包括了所有解析之后的内容,包括文件和非文件输入
- 它不仅可以解析request.POST的内容,还可以解析PUT和PATCH请求
- 它支持REST framework灵活的解析方式。例如你可以像处理表单数据一样处理传入的JSON数据
.query_params
可以看做是request.GET。我们用request.query_params代替了django中的request.GET。因为任何类型的HTTP请求都会有包含query parameters,而GET只有在request.GET中才有。这样可以让我们的代码更健壮。
.parsers
这个属性会在视图中的parser_class集合或者settings设置中的DEFAULT_PARSER_CLASSES来指定。一般你只要使用APIView类或者@api_view装饰器就会自动为你加载,不需要自己设置。
注意:
- 如果前端请求发送了一个非正常的内容,我们使用request.data时会抛出ParseError异常,APIView和@api_view都会补货这个异常然后返回一个 400 Bad Request
- 前端发送来的内容完全无法识别时,无法解析转换时。会返回415 Unsupported Media Type。
Authentication
REST framework提供了灵活的基于request的认证,你可以通过认证达到如下目的:
- 对于API中不同的部分使用不同的验证策略
- 同时使用多种验证策略
- 对于传递过来的请求同时使用基于用户和token的认证
.user
通过认证之后,会返回django内置的User模型实例,但它具体的行为取决于你定义的认证策略。如果未通过认证,会返回一个django内置认证模块的AnonymousUser实例
.auth
通过认证之后,会返回认证时附加的内容,通常是登录的token。未通过认证或者没有附加的内容时,会返回None。
.authenticators
通常是Authentication实例的列表。由认证策略自动配置,不需要手动操作。
浏览器附属属性
REST framework支持由浏览器在请求上附加的一些属性。部分如下:
.method
request.method返回HTTP请求方法的大写字符串
.content_type
返回request.body里的数据类型。一般也不需要自己操作。
.stream
返回request.body里内容的数据流。一般不需要手动操作
标准HTTPRequest属性
REST framework的request是继承自HTTPRequest的,自然也有HTTPRequest的一些属性。例如META、session等。