异常处理

在APIView的源码中,执行三大认证,视图类方法的时候,如果出现了异常,会被全局异常捕获。

我们想要做的事将报错信息展示为自定义的错误信息。

eg:

报错:

{code:999,msg:服务器异常,请联系系统管理员}

成功:

{code:100,msg:成功,data:[{},{}...]}

自定义APIException,此时我们自定义异常,那么异常捕获会优先使用自定义。

settings.py,配置文件配置之后才会使用自定义的异常捕获

REST_FRAMEWORK = {

'EXCEPTION_HANDLER':'app01.errors.comment_exception_handler'

}

查看from rest_framework.views import exception_handler源码。

APIException异常的状态码为500,被自定义异常捕获。

主动排除程序异常

最终想要呈现的效果:

from rest_framework.views import exception_handler

from rest_framework.response import Response

"""

在内置的settings.py 如果没有自定义使用内置的异常捕获。

'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',

"""

def comment_exception_handler(exc, context):

"""

{

'view': ,

'args': (),

'kwargs': {},

'request':

}

"""

print(context)

res = exception_handler(exc, context)

"""

第一种情况:返回Response对象,

这表示已经处理了异常,并且只处理APIException的异常

"""

if res:

res = Response(data={

'code':998,

'status':res.status_code,

'msg':res.data.get('detail','服务器异常,联系系统管理员')

})

else:

return Response({'code': 999, 'msg': str(exc)})

request = context.get('request')

view = context.get('view')

print(f'错误原因: {str(request)}',f'错误视图类: {str(view)}',f'请求方式:{str(request.method)}',f'请求路径:{request.path}')

return res

输出:

错误原因: 错误视图类: 请求地址:GET 请求路径:/text/

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: