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\n' % 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',
    }
    
posted @ 2019-12-30 16:28  🍞面包🍞  阅读(164)  评论(0编辑  收藏  举报