• 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)
    
  • 相关阅读:
    ElementUi
    Vue插件
    Vue-cli
    Vue进阶
    Vue组件
    Vue生命期钩子
    Vue基础
    Vue介绍
    logging模块
    time模块
  • 原文地址:https://www.cnblogs.com/Afrafre/p/11865652.html
Copyright © 2020-2023  润新知