django-rest-framework中自定义异常捕获

1. DRF中自带的异常捕获类型

2. 增加额外异常捕获流程

3.  比如数据库异常drf不能自动捕获,我们可以自定义一个数据库异常捕获

(1)在项目根目录县新建一个exceptions.py文件,代码如下

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


# 在DRF异常捕获的基础上,增加数据库的异常捕获
def exception_handler(exe, context):
    # 先用DRF自带的异常捕获去拦截
    response = drf_exception_handler(exe, context)

    if response is None:
        view = context["view"]
        if isinstance(exe, DatabaseError):
            print("[{}]: {}".format(view, exe))
            # 507: 代表数据库异常状态码
            response = Response({"detail":"服务器内数据库错误"}, status=status.HTTP_507_INSUFFICIENT_STORAGE)

    return response

(2)在settings.py中增加异常捕获配置项

# drf配置项
REST_FRAMEWORK = {
    # 修改异常捕获函数为我们自己定义
    "EXCEPTION_HANDLER": "exceptions.exception_handler",
}

(3)测试的时候我们可以在视图中自动抛出一个数据库异常

from django.db import DatabaseError

raise DatabaseError()

猜你喜欢

转载自blog.csdn.net/weixin_42289273/article/details/114436287