标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。