Welcome to kimi's blog

drf之请求、响应

断言

断言

使用关键字assert

作用

断言结果,如果不是就抛异常

eg1:
    # 断言
    name = 'rose'
    if name == 'kiki':
        print('你是管理员,可以执行该操作')
    else:

        # print('你不是管理员,没有该权限')
        raise Exception('你不是kiki,主动抛异常')
        
        
eg2:
    name = 'kimi'
    assert name == 'kiki'  # 断定是,如果不是就抛异常
    
    print('后续代码执行')

drf之请求

  1. Request 能够解析前端传入的编码格式

    方式一 局部配置

    在继承APIView及其子类的的视图类中配置

    from rest_framework.parsers import JSONParser,FormParser,MultiPartParser
    class BookView(APIView):
        parser_classes = [JSONParser,]
    

    方式二全局配置

    在配置文件中配置(影响所有,全局配置)

    • django项目有默认配置,每个项目有独立的一个配置文件

      from django.conf import settings
      from djangoday01 import settings
      
    • drf有默认配置,每个项目有独立的一个配置文件---->>>django的配置文件中

      from rest_framework import settings
      from drf_day05 import settings
      
      REST_FRAMEWORK = {
          'DEFAULT_PARSER_CLASSES': [
       	   'rest_framework.parsers.JSONParser',  # 默认json默认
       	   'rest_framework.parsers.FormParser',  # 默认urlencoded编码
       	   'rest_framework.parsers.MultiPartParser', # 默认form_data编码
          ],
      }
      

    方式三

    如果全局配了1个,某个视图类想要3个,如何配置?

    1.全局配置不用动,只需要在视图类中配置能够解析前端数据的3种编码格式
    2.视图类中,查询的顺序:视图类自身——>项目drf配置——>drf默认配置
    
  2. Request类有哪些属性和方法

    视图类方法中的request

    # 方法
    1.__getattr__
       在视图类的方法中,执行request.method,新生的request是没有method的,就触发了新的Request的__getattr__方法的执行
        def __getattr__(self, attr):
     	   try:
     		   # 从老的request中反射出 要取得属性
     		   return getattr(self._request, attr)
     	   except AttributeError:
     		   return self.__getattribute__(attr)
    2.request.data    包装了数据属性
        无论是post/put请求,放在了body中提交的数据,都是从request.data中取,取出来就是字典
        所有编码格式都可以
    
    
    3.request.query_params    包装了数据属性
        get请求携带的参数,以后从这里取
        query_params:查询参数 ----->restful规范请求地址中带查询参数
    
    4.request.FILES    包装了数据属性
     	前端提交的文件,从request.FILES 取
    

drf之响应

drfdjango的一个app,所有要先注册的,drf的响应,如果使用浏览器和postman访问同一个接口,返回格式是不一样的

浏览器的响应

image

postman响应

image

  1. Response能够响应的编码格式

    方式一

    在视图类中写-----局部配置

    # 响应格式
    from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
    class BookView(APIView):
        renderer_classes=[JSONRenderer,]
    

    方式二

    在项目配置文件中写---全局配置

    REST_FRAMEWORK = {
        'DEFAULT_RENDERER_CLASSES': [
            'rest_framework.renderers.JSONRenderer',
            'rest_framework.renderers.BrowsableAPIRenderer',
        ],
    }
    

    方式三

    使用顺序(一般就用内置的即可)

    使用顺序:视图类自身配置——>项目drf配置——>drf默认内置的配置

  2. Resposne的源码属性或方法

    源码分析

    from rest_framework.response import Response
    视图类的方法返回时,retrun Response ,走它的__init__方法,init中可以传参数
    

    属性或方法

    1.__init__方法
    	def __init__(self, 
                     data=None, 
                     status=None,
                     template_name=None, 
                     headers=None,
                     exception=False, 
                     content_type=None)
                super().__init__(None, status=status)
    
            if isinstance(data, Serializer):
                msg = (.....)
                raise AssertionError(msg)
    
            self.data = data
            self.template_name = template_name
            self.exception = exception
            self.content_type = content_type
    
            if headers:
                for name, value in headers.items():
                    self[name] = value
    
    参数解析             
    1.data
    	前面写的ser.data,可以是字典/列表/字符串,序列化后返回给前端,前端在响应体中看到就是ser.data序列化后的格式
        
    2.status
    	http响应的状态码,默认是200----可以修改
            -drf在status包下,把所有http响应状态码都写了一遍,常量
            -from rest_framework.status import HTTP_200_OK
            -Response('dddd',status=status.HTTP_200_OK)
            
    3.template_name方法
    	上述方法了解即可,它修改响应模板的样子,BrowsableAPIRenderer定死的样子,后期公司可以自己定制。
        
    4.headers
    	响应头,http响应的响应头
        如何在原生的django的响应头添加东西
        # 四件套   render  redirect HttpResponse  JsonResponse
        obj=HttpResponse('aa')
        obj['xxx']='yyy'
        return obj
        
    5.content_type
        响应编码格式,一般不动
    
posted @ 2023-02-04 16:14  魔女宅急便  阅读(77)  评论(0)    收藏  举报
Title