drf自定义异常处理
一、前言
我们知道当前端传递到后端的数据不正确时,后端会将错误的信息返回到前端。如果我们后端服务器出现了异常,那就说明我们的后端逻辑出现了问题,需要对后端代码进行修改。
我们需要在异常发生时,对异常进行捕获,并记录到日志文件当中,而不是将错误的信息直接返回到前端,这是没有意义的。那么我们如何来自定义自己的异常处理机制呢?
二、drf默认异常处理
rest_framework文件下的views.py中exception_handler方法
def exception_handler(exc, context):
if isinstance(exc, Http404):
exc = exceptions.NotFound()
elif isinstance(exc, PermissionDenied):
exc = exceptions.PermissionDenied()
if isinstance(exc, exceptions.APIException):
headers = {}
if getattr(exc, 'auth_header', None):
headers['WWW-Authenticate'] = exc.auth_header
if getattr(exc, 'wait', None):
headers['Retry-After'] = '%d' % exc.wait
if isinstance(exc.detail, (list, dict)):
data = exc.detail
else:
data = {'detail': exc.detail}
set_rollback()
return Response(data, status=exc.status_code, headers=headers)
# 当exe不是APIException的实例时会返回None,导致了500错误。
return None
三、借用drf的异常处理来自定义
exception.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
def my_exception_handler(exe, context):
response = exception_handler(exe, context)
if not response:
# 此处对异常信息进行日志保存
response = Response({'detail': '服务器异常,%s' % exe},status=500)
return response
四、修改配置文件
settings.py
REST_FRAMEWORK = {
# 默认异常处理
# 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
'EXCEPTION_HANDLER': 'api.exception.my_exception_handler',
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!