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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!