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': '自己写的错误类',
}

自定义错误类

  1. 我在项目中创建了exceptions.py文件
  2. 在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
posted @   树苗叶子  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示