• day 71


    day 71

    02drf生命周期 - CBV

    1. (项目启动)APIView的as_view覆盖掉View的方法(在基础上局部禁用csrf)=> (接收到请求)调用as_view的返回值view,调用dispatch分发请求 => APIView重写了dispatch方法 => 在分发之前,对request进行了二次封装、对数据进行解析 => 三大认证 => 请求对实际响应,视图类的返回值 => 出现异常,就会交给异常处理模块进行处理 => 响应模块完成响应,渲染模块可以json或浏览器模式进行渲染

    03drf的基础组件;请求、响应、渲染、解析、异常

    1. APIView 类继承了View类,重写了as_view 和 dispatch 方法
    2. 重写的as_view方法,主体还是View的as_view,只是在返回函数地址时,局部禁用了csrf认证
    3. 重写的dispatch方法,

    01请求模块

    1. 将wsgi的request对象转化为drf的Requeset类的对象
    2. 封装后的request对象完全兼容wsgi的request对象,并且将原来的request保存在request._request
    3. 重新格式化请求数据存放位置
      1. 拼接参数;request.query_params
      2. 数据包参数;request.data

    02解析模块

    1. 指粗粒数据包参数 - form-data,urlencoded,json
    2. 全局配置所有视图类的解析方式,配置三种
    3. 局部配置当前视图类的解析方式,配置三种

    03响应模块

    1. data;响应数据
    2. status;响应的网络状态码
    3. template_name;drf完成前后台不分离,不需要了解
    4. headeers;响应头
    5. exception;一般异常响应,会将其设置为True,默认False
    6. content_type;默认就是application/json 不需要处理

    04渲染模块

    1. 可以配置返回结果为json数据或页面数据
    2. postman请求结果是json,浏览器请求结果是页面

    05异常模块

    1. 自定义异常处理函数;异常先交给drf处理,如果处理结果为空代表是服务端错误,再手动处理,不管哪种异常都要记录到日志文件当中

      # 导入drf的异常处理函数exceptioin_handler并重命名方便调用
      from rest_framework.views import exception_handler as drf_exception_handler
      # 对自定义的服务端错误信息进行封装
      from rest_framework.response import Response
      # 导入drf内置响应状态码
      from rest_framework import status
      # 重写异常处理函数
      def exception_handler(exc, context):
          response = drf_exception_handler(exc, context)  # 交给drf自带处理客户端错误
          # 对错误信息进行格式化封装				发生错误的视图类					错误请求的请求方式 				错误信息
          detail = '%s - %s - %s' % (context.get('view'), context.get('request').method, exc)
          if not response:  # response为空表示为,服务端错误
              response =  Response({'detail': detail}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)  # status为给客户端返回的响应状态码
          else:
              response.data = {'detail': detail}
      
          # 核心:要将response.data.get('detail')信息记录到日志文件
          # logger.waring(response.data.get('detail'))
      
          import sys  # 将异常信息以错误流的形式打印到终端
          sys.stderr.write('异常:%s
      ' % response.data.get('detail'))
      
          return response		# 将处理好的响应数据返回出去
      
      
    2. 在settings中配置执行自定义异常处理函数

      # drf框架自定义配置
      REST_FRAMEWORK = {
          # 异常模块:异常处理函数
          # 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',  drf自带异常处理函数
          'EXCEPTION_HANDLER': 'api.exception.exception_handler',
      }
      
  • 相关阅读:
    .a包生成64位
    iOS教程
    iOS 难题解决日志------2层控制器 上面的控制器显示透明
    企业级的App发布流程
    如何从oc中去获取一个私有的变量.....
    iOS app的破解原理,就是去除已付费的账户信息的原理是什么?
    Could not launch "app_name"
    GCD时间轴
    Win8自动更新怎么关闭 取消Win8自动更新
    python3 elf文件解析
  • 原文地址:https://www.cnblogs.com/luocongyu/p/12120376.html
Copyright © 2020-2023  润新知