drf中的请求与响应
请求与响应(3星)
请求:Request
REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。
REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析为类字典[QueryDict]对象保存到Request对象中。
Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。
无论前端发送的哪种格式的数据,我们都可以以统一的方式读取数据。
request.data: POST, PUT请求的数据
request.query_params: GET请求的数据
请求格式
1 请求支持三种编码格式,urlencoded,json,formdata
2 如果不配置,默认支持三种
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser', # 解析application/json格式
'rest_framework.parsers.FormParser', # 解析application/x-www-form-urlencoded
'rest_framework.parsers.MultiPartParser' # multipart/form-data
]
3 全局配置,在项目的配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser', # 解析application/json格式
'rest_framework.parsers.FormParser', # 解析application/x-www-form-urlencoded
'rest_framework.parsers.MultiPartParser' # multipart/form-data
]
}
4 局部配置
from rest_framework.parsers import JSONParser
class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
# 局部使用,只针对当前视图类有效,只想处理json格式
parser_classes = [JSONParser,]
5 使用顺序:我们没有配置,也有默认配置:3个都能解析
drf有默认配置(最后)----》项目配置文件的配置(其次)----》视图类中配的(优先用)
drf的默认配置:from rest_framework import settings
# 总结:一般情况下,都使用默认即可,不用配置
响应:Response
from rest_framework.response import Response
继承关系: Response >>> SimpleTemplateResponse >>> HttpResponse
参数:
参数 | 作用 |
---|---|
data=None(掌握) | 传字典或列表,序列化成json格式字符串给前端 |
status=None(掌握) | 状态码:http响应的状态码 |
template_name=None(基本不用) | 模板名字,在浏览器访问,看到的好看的模板(自定制) |
headers=None(掌握) | 响应头(传字典格式) |
exception=False | 不用管 |
content_type=None | 响应编码类型 |
需要掌握: data, status, headers
data就是传数据
status就是http响应的状态码
headers就是响应头
完整使用
比较完整的使用
response={'code':100,'msg':'查询成功','result':ser.data}
return Response(response,status=status.HTTP_201_CREATED,headers{'xxx':"xxx"})
响应格式
通过配置, 设置响应格式(浏览器模板的样子或者 纯json)
注意事项:
1.drf有个默认配置文件(from rest_framework import settings),如果项目在django的settings中配置了,优先使用项目的,如果没配置, 使用内置的
2.后期, drf所有的配置, 都写在下面的字典中
3.返回样式我们一般不配置
全局配置:
REST_FRAMEWORK={
#配置响应格式,默认有俩(json,浏览器的)
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', # 纯json
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器
]
}
局部配置(只针对某一视图函数):
# 导入你想设置的返回格式
from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
class BookAPIView(APIView):
renderer_classes = [BrowsableAPIRenderer] # 这样在该视图类就只返回浏览器格式
renderer_classes = [JSONRenderer] # 这样在该视图类就只返回纯json格式
renderer_classes = [JSONRenderer, BrowsableAPIRenderer] # 这样在该视图类就返回两种格式
# 查询所有的接口
def get(self, request, *args, **kwargs):
pass
优先级
局部 > 项目中 > drf默认