drf之全局异常处理
目录
- 说明
- 使用方法
- 自定义错误类
说明
当系统报错时,希望系统进行统一报告,比如常见的:系统繁忙,请稍后再试、服务异常,请稍后再试这种报错。
另外,drf不能处理非drf的异常,比如 list = [1, 2, 3] print(l[5]),这种时候会报错,不会抛异常,有时候我们不希望程序报错,也需要使用全局异常处理。
使用方法
在django项目中添加如下配置(默认配置在drf的settings.py中,我的目录是:Lib/site-packages/rest_framework/settings.py):
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': '自己写的错误类',
}
自定义错误类
- 我在项目中创建了exceptions.py文件
- 在exceptions.py文件中定义,可以参考drf默认配置(Lib/site-packages/rest_framework/views.py中的exception_handler函数)
from rest_framework.views import exception_handler
from rest_framework.response import Response
def my_exception_handler(exc, context):
res = exception_handler(exc, context)
# exc就是错误对象
# 正常走了这个函数,系统就报错了,这时就应该记录日志,需要把exc记录到系统中
# 记录日志的信息应该有:'时间', '登录用户id', '用户ip', '请求方式', '请求地址', '执行视图的类', '错误原因'
if res:
res = Response(data={'code': 10001, 'msg': res.data.get('detail', '系统异常,请联系系统管理员')})
else:
res = Response(data={'code': 10002, 'msg': '系统异常,请联系系统管理员'})
return res