1.请求和响应
REST framework引入了2个新的对象:Request和Response
1.1 Request
包结构:rest_framework.request.Request
该对象扩展了常规的HttpRequest ,增加了对REST框架灵活的请求解析和请求认证的支持
主要属性:
- data
这个属性类似django的request的POST和FILES属性:- django的request.POST:只能获取POST请求的form表单数据
- rest_framework的request.data:
- 包括所有已解析的内容,包括文件和非文件输入
- 支持’POST’, ‘PUT’ 和’PATCH’ 方法
- 支持REST框架的灵活请求解析,而不仅仅支持表单数据。例如,可以传入JSON数据
- query_params
就是标准的request.GET属性,不过从命名角度来说,更加合理,因为不是只有GET请求才有GET查询参数 - parsers
一般不需要访问
在视图中应用 APIView类或@api_view装饰(装饰视图函数)将确保这个属性被自动设置
注意事项
- 如果客户端发送格式错误的内容,则访问request.data可能会引发错误ParseError。默认情况下,REST框架的APIView类或@api_view装饰器将捕获错误并返回400 Bad Request响应。
- 如果客户端发送的请求具有无法解析的内容类型,UnsupportedMediaType则会引发异常,
默认情况下将捕获该异常并返回415 Unsupported Media Type响应
1.2 Response
包结构:rest_framework.response.Response该类是Django的 SimpleTemplateResponse 的子类,使用python原始对象进行数据初始化,然后,REST框架使用标准HTTP内容协商来确定它应如何呈现最终的响应内容
初始化: Response(data, status=None, template_name=None,headers=None, content_type=None)
- data :响应的序列化数据,如果是复杂对象,如模型实例,需要在传入之前序列化为原始数据类型(如dict等)
- status :响应的状态代码,默认为200
- template_name : HTMLRenderer 选择时使用的模板名称
- headers :要在响应中使用的HTTP标头的字典
- content_type :响应的内容类型。通常,这将由内容协商确定的渲染器自动设置,但在某些情况下您可能需要明确指定内容类型
属性:
- data:响应的未呈现的序列化数据
- status_code:响应状态码,建议使用HTTP_200_OK 这样的常量,而不是 200 这样的数字,常量给每个状态代码提供更明确
的标识符
更详细的见:https://www.django-rest-framework.org/api-guide/status-codes/ - content:渲染后的响应内容,调用此属性前需要调用.render()方法渲染
- template_name:指定的模板名
- accepted_renderer:用于渲染响应内容的渲染器实例,在视图返回响应之前由 APIView 或 @api_view 自动设置
- accepted_media_type:内容协商选择的媒体类型,在视图返回响应之前由 APIView 或 @api_view 自动设置
- renderer_context:需要渲染的上下文字典对象,在视图返回响应之前由 APIView 或 @api_view 自动设置