zoukankan      html  css  js  c++  java
  • 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',
      }
      
  • 相关阅读:
    通过keras例子理解LSTM 循环神经网络(RNN)
    [机器学习]集成学习--bagging、boosting、stacking
    [机器学习]梯度提升决策树--GBDT
    [机器学习]回归--Decision Tree Regression
    [机器学习]回归--Support Vector Regression(SVR)
    [机器学习]回归--Polinomial Regression 多项式回归
    [机器学习]回归--(Simple LR and Multiple LR)
    [深度学习] 权重初始化--Weight Initialization
    深度学习实践经验汇总
    Deeplearning.ai课程笔记--汇总
  • 原文地址:https://www.cnblogs.com/luocongyu/p/12120376.html
Copyright © 2011-2022 走看看