首页 > 其他分享 >drf之请求、响应

drf之请求、响应

时间:2023-02-04 16:22:31浏览次数:49  
标签:__ 请求 framework rest 响应 视图 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
        响应编码格式,一般不动
    

标签:__,请求,framework,rest,响应,视图,drf
From: https://www.cnblogs.com/zhanglanhua/p/17091797.html

相关文章

  • 第17章 网络安全应急响应技术原理与应用
    第17章网络安全应急响应技术原理与应用17.1网络安全应急响应概述“居安思危,思则有备,有备无患。”网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全......
  • vue响应式修改数据
    this.arr[0]=1等价于this.$set(this.0,1)Vue.set(target,propertyName/index,value)参数:{Object|Array}target{string|number}propertyName/index......
  • axios 请求
    完整文档官网文档html<inputtype="file"multipleid="files"><buttononclick="postAxios()">上传文件s</button><pid="files_progress"style="width:0px;heig......
  • 群晖 WebStation PHP 使用 curl 进行 http 请求(群晖 WebStation php 安装第三方库)
    在群晖中,安装WebStation后,在安排配置PHP后,发现编写的php文件中有很多第三方库是无法适用的,运行就是500错误页面。遇到这种情况,我们需要为php添加对应的脚本库,具体......
  • 两种请求有什么区别?
    publicfunctionhttp88($_url,$data){$curl=curl_init();$headers=array("Content-Type:application/json");//请......
  • SSRF 服务器端请求伪造
    0x01定义SSRF(Server-SideRequestForgery:服务器端请求伪造)是一种由攻击者构造,形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内......
  • drf-drf请求、响应、基于GenericAPIView+5个视图扩展类
    1.反序列化类校验部分源码分析(了解)1.当我们在视图类中生成一个序列化类对象ser,并且用ser.is_valid()是就会执行校验,校验通过返回True,不通过返回False。首先对象ser和序列......
  • DRF视图组件
    DRF视图组件 文章目录DRF视图组件一、视图视图继承关系二、2个视图基类1.APIViewAPIView与View示例小结2.GenericAPIView(通用视图类)1.......
  • 反序列化类校验部分源码解析,断言,drf之请求与响应
    反序列化类校验部分源码解析反序列化校验,什么时候开始执行校验(切入点)视图类中的ser.is_valid(),就会执行校验,校验通过返回True,不通过返回False入口:ser.is_valid()......
  • drf-请求/相应/视图组件/
    内容概要反序列化类校验部分源码解析断言drf-请求drf-响应视图组件介绍及两个视图基类基于GenericAPIView+5个视图扩展类反序列化类校验部分源码分析......