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()