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就是传数据

image

status就是http响应的状态码

image

headers就是响应头

image

完整使用

比较完整的使用
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默认

posted @ 2022-03-31 20:17  zong涵  阅读(112)  评论(0编辑  收藏  举报