zoukankan      html  css  js  c++  java
  • drf 自定义异常处理

    DRF自定义异常处理

    # 分析drf 框架APIView
    dispatch方法 --- (try)handle_exception(exc) --- get_exception_handler() --- response = exception_handler(exc,context)
    handle_excepton: 捕获异常处理,return response 
    get_exception_handler: settings.EXCEPTION_HANDLER
        找exception_handler(exc,context)类去处理异常
    
    '''
    get 请求的四个参数
    context:{
        'view':self,
        'args':getattr(self,'args',()),
        'kwargs':getattr(self.'kwargs',{}),
        'request':getattr(self,'request,None)
    }
    '''
    # 重写异常,处理drf 没有处理的异常
    # 重写 exception_handler 方法,response为None(表示没有处理),自行处理
    1. settings 中配置 settings.EXCEPTION_HANDLER
    REST_FRAMEWORK = {
        # 自定义异常的路径
        'EXCEPTION_HANDLER':'luffyapi.utils.exceptions.exception_handler'
    }
    2. utils.exceptions.py
    # rest_framework.views 下的exception_handler处理了所有drf可控范围的异常
    #  目的: 处理drf 未处理的异常
    from rest_framework.views import exception_handler as drf_exception_handler
    from .response import APIResponse
    from .logging import logger
    
    def exception_handler(exc,context):
        # 还是调用了drf 的exception_handler方法,只需处理未处理的异常
        response = drf_exception_handler(exc,context)
        if response is None:
            # drf 处理不了的异常
            error_info = '[%s] [%s]'%(context['view'],exc)
            logger.error(error_info)
            return APIResponse(1, '服务器异常')
        response.exception = True
        return response
    

    将admin中的密码密文显示

    # 将admin中的密码密文显示
    admin.py 
    from django.contrib.auth.admin import UserAdmin
    admin.site.register(models.User,UserAdmin)
    
  • 相关阅读:
    Java--NIO(一)
    Jackson
    SpringBoot整合Redis作为缓存
    RabbitMq学习笔记——配置
    RabbitMq学习笔记——概念
    利用gsoap工具,通过wsdl文件生成webservice的C++工程文件
    QThreadPool&QRunnable&类函数的使用
    C++构造函数初始化列表与构造函数中的赋值的区别
    Qt 4.8.2.+VS2008静态编译
    Qt开发的程序在没有安装Qt环境的机器上可能出现的一些问题
  • 原文地址:https://www.cnblogs.com/Afrafre/p/11865652.html
Copyright © 2011-2022 走看看