文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Django RestFramework 全局异常处理详解

2024-04-02 19:55

关注

REST framework定义的异常

一、定义异常处理类

from django.http import JsonResponse
from rest_framework.views import exception_handler as drf_exception_handler
import logging
from django.db import DatabaseError
from redis.exceptions import RedisError
import traceback
# 获取在配置文件中定义的logger,用来记录日志
logger = logging.getLogger('django')

def exception_handler(exc, context):
    """
    自定义异常处理
    :param exc: 异常
    :param context: 抛出异常的上下文(包含request请求对象和view视图对象)
    :return: Response响应对象
    """
    # 调用drf框架原生的异常处理方法
    response = drf_exception_handler(exc, context)
    if response is not None:
    	logger.info('REST_FRAMEWORK处理异常')
    	# 使用自定义封装好的方法处理数据格式并返回给前端
        return response_util.success(response)
    view = context['view']
    # 打印异常类以及异常的文本信息
    logger.error('[%s] %s' % (view, exc))
    returnData = {
        'code': 500,
        'msg': '服务器错误',
        'data': ""
    }
    # 捕获其他异常,直接返回 500
    if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
        # 数据库异常,使用traceback.format_exc()可以像系统报错没拦截那样子打印详细错误信息又不会导致程序停止
        logger.error(f'其他未知错误:{traceback.format_exc()}')
        # 使用django原生的响应对象返回,不能用DRF框架的响应对象
        return JsonResponse(data=returnData, status=500)
    else:
        # 打印错误详细信息
        logger.error(f'其他未知错误:{traceback.format_exc()}')
        # 使用django原生的响应对象返回,不能用DRF框架的响应对象
        return JsonResponse(data=returnData, status=500)

二、注册DRF框架中默认的错误处理为自己定义的类

在settings.py文件中定义

REST_FRAMEWORK = {
    # 异常处理
    'EXCEPTION_HANDLER': 'meiduo_service.utils.excepitons.exception_handler',
}

修改django默认处理了错误对象类似,将错误处理对象改为用中间件即可,处理的逻辑思路一样,不过类以及设置方法不一样而已

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯