ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

drf 自定义异常处理

2019-11-15 13:01:39  阅读:277  来源: 互联网

标签:exception exc 自定义 handler 异常 response 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)

标签:exception,exc,自定义,handler,异常,response,drf
来源: https://www.cnblogs.com/Afrafre/p/11865652.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有