DRF传入视图的request对象不再是Django默认的HttpRequest对象,而是DRF提供的扩展后的request对象。 Request对象的核心功能是request.data属性,它与request.POST类似,但对于使用Web API更为有用。
request.POST
request.data
常用属性
data
:request.data
返回解析之后的请求体数据。类似于Django中的request.POST
和request.FILES
属性,但提供如下特性:- 包含了解析之后的文件和非文件数据;
- 包含了对POST、PUT、PATCH请求方式解析后的数据;
- 利用了DRF的parsers解析器,不仅支持表单类型数据,也支持JSON数据。
query_params
:request.query_params
与Django标准的request.GET
相同,只是更换了更正确的名称而已。因为任何HTTP方法类型都可能包括查询参数,而不仅仅是GET请求。
return Response(data)
2.1 常用属性
data
: Response未渲染的序列化数据。status_code
: HTTP响应的数字状态码。content
: 渲染好的响应内容,但必须先调用render()
方法,才能访问content
。
2.2 自定义Response对象
from rest_framework.response import Response
class CustomResponse(Response):
def __init__(self, code=1000, msg="成功", data=None, status=None, template_name=None, headers=None, content_type=None, **kwargs):
custom_data = {'code':code, 'msg': msg}
if data:
custom_data = {'code':code, 'msg': msg, 'data':data}
custom_data.update(kwargs)
super().__init__(data=custom_data, status=status, template_name=template_name, headers=headers, content_type=content_type)
"""
使用时,就要返回CustomResponse类的对象了
return CustomResponse(data={'name':'hugh'},......)
"""
在视图中使用纯数字的状态码,会导致可读性很差,并且容易忽视掉错误或警告。 DRF对每一个状态码提供了更加清楚、直观的标识符,其本质是一些常量,将纯数字的状态码保存了起来而已。比如 HTTP_400_BAD_REQUEST
,保存的就是数字400。
3.1 使用方法
虽然实现简单,但使用这些标识符(常量)的确可以使代码更加清晰、易读。比如:
from rest_framework import status
from rest_framework.response import Response
def empty_view(self):
content = {'请求的资源不存在'}
return Response(content, status=status.HTTP_404_NOT_FOUND)
这些标识符(常量)仅仅是加了HTTP前缀和一些状态关键字后缀。只要我们知道要使用哪个状态码,就可以通过IDE的自动补全打出完整名称,无需去逐个了解😄。
3.2 辅助函数
rest_framework.status
模块还包括一组辅助函数,用于测试状态代码是否在给定范围内。
完整的函数列表如下:
is_informational(status.HTTP_404_NOT_FOUND)
is_success()
is_redirect()
is_client_error()
is_server_error()
4.1 全局配置
在项目配置文件settings.py中:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}
4.2 局部配置
在需要配置的视图中:
from rest_framework.renderers import JSONRenderer
from rest_framework.views import APIView
class AView(APIView):
renderer_classes = [JSONRenderer]
def get(self, request):
......
4.3 渲染器类
- JSONRenderer: 使用utf-8编码将数据呈现为
JSON
,该渲染器是默认启用的。 media_type:application/json
。 - TemplateHTMLRenderer: 使用Django的标准模板渲染将数据渲染到HTML中,传递给Response的数据不需要序列化,但可能需要
template_name
参数。 media_type:text/html
。 - BrowsableAPIRenderer: 将数据渲染成可浏览的API,也就是通过浏览器打开时默认的样子,所以,该渲染器是默认启用的。 media_type:
text/html
。
渲染器类种类繁多,但不常用。感兴趣可以参考官方文档:传送门
Original: https://blog.csdn.net/qq_39330486/article/details/121999274
Author: 花_城
Title: Django REST Framework——4. 请求与响应
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737136/
转载文章受原作者版权保护。转载请注明原作者出处!