drf请求和响应、GenericAPIView封装、5个视图扩展类

发布时间 2023-09-04 16:53:26作者: 凡人半睁眼

一、drf 之请求

1、drf 之请求Request类

视图类继承APIView后多了
-0 去除了csrf认证
-1 新的request
   -request.data
   -request.query_params
   -request.其他跟之前一样
   -request._request  是老的
-2 三大认证
-3 全局异常

2、控制前端请求的编码格式

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer

# JSONParser:解析json格式
# FormParser:urlencoded
# MultiPartParser:form-data

局部限制

写一个类属性 parser_classes = [JSONParser或者FormParser、MultiPartParser] 

class BookView(APIView):
    # 类属性
    parser_classes = [JSONParser]

    def get(self, request):
        res = Response(data={123}, status=500, headers={'xxx': 'yyy'})
        print(res.data)
        return res

    def post(self, request):
        print(self.parser_classes)
        print(request.data)
        return Response('新增')

效果:

全局限制

REST_FRAMEWORK = {
#####请求体的限制
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        # 'rest_framework.parsers.MultiPartParser'
    ],
#####响应格式的限制
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
}

补充:

全局使用后,局部再限制---》只需要在视图类上加即可

全局如果用了,局部这样配,优先用局部的,也就是这个类管理的接口,只能接收form-data格式 parser_classes = [MultiPartParser]

二、drf之响应