其他分享
首页 > 其他分享> > drf篇:全局异常处理

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