drf篇:全局异常处理
作者:互联网
全局异常处理(重要)
使用drf的异常处理可以捕获drf的报错信息,但是django或者原生python的报错信息也需要我们处理,这些捕获到的信息都需要我们封装好发送到前端,这是我们全局处理异常的目的。
# drf配置文件中,已经配置了,但是它不符合咱们的要求
# drf的配置文件:'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
# 如果抛了异常,就会执行exception_handler函数
# 重新写一个函数,如果出了异常,执行我们的函数
# drf默认的异常处理,只处理了drf自己的异常:所有drf中抛的异常,都有detail,django的异常,抛出很长的xml数据
{
"detail": "小伙子,你错了"
}
{
code:999
msg:"小伙子,你错了"
}
使用步骤
# 第一步:写一个函数
from rest_framework.views import exception_handler
from rest_framework.response import Response
def common_exception_handler(exc, context):
# 正常来讲,在这里需要记录日志---》如何在django中记录日志后面讲
# 日志记录,越详细越好:哪个用户(id,ip),在什么时间,执行哪个视图函数时报了错,请求地址是什么
print(context['view']) #视图类的对象
print(context['request']) #当前请求的对象----》ip,用户id,当前时间,请求地址来
view=context['view']
request=context['request']
print('ip地址为:%s的用户,访问:%s 视图类,报错了,请求地址是:%s'%(request.META.get('REMOTE_ADDR'),str(view),request.path))
response=exception_handler(exc, context)
if response: # 这是drf的异常,其实人家已经处理了,但是不符合我的格式 {code:999,msg:错误}
res=Response({'code':999,'msg':response.data.get('detail')})
else:
# res=Response({'code':998,'msg':'服务器错误,请联系系统管理员'})
res=Response({'code':998,'msg':str(exc)})
return res
# 第二步:把函数配置在配置文件中
REST_FRAMEWORK = {
# 自己写的全局异常捕获
'EXCEPTION_HANDLER': 'app01.exceptions.common_exception_handler',
}
标签:exception,code,handler,context,全局,异常,drf 来源: https://www.cnblogs.com/williama/p/16400532.html