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 # 总结:一般情况下,都使用默认即可,不用配置
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默认