Django rest_framework 自定义捕获数据库错误

自定义捕获错误

from django.db import DatabaseError
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import exception_handler

import logging

logger = logging.getLogger('django')
"""
此处的"django"是settings中的
# 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],  # 将来项目上线,把console去掉
            'propagate': True,
        },
    }
"""


def custom_exception_handler(exc, context):
    """
    自定义异常处理
    :param exc: 异常类
    :param context:  抛出异常的上下文
    :return: Response响应对象
    """
    # 调用drf框架原生的异常处理方法
    response = exception_handler(exc, context)  # context是个字典记录错误发生的具体位置,其中{'view':'记录了哪个文件,哪行报错了'}

    if response is None:
        view = context['view']
        if isinstance(exc, DatabaseError):
            # 数据库异常
            # logger.error('[%s] %s' % (view, exc))
            logger.error(f'{view} {exc}')
            response = Response({'message': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
    return response

settings中配置

REST_FRAMEWORK = {
    # 异常处理
    'EXCEPTION_HANDLER': '定义的项目名称.utils.MyExceptionhandler.custom_exception_handler',
}

 

posted @ 2023-01-16 15:46  笑而不语心自闲  阅读(70)  评论(0编辑  收藏  举报