REST framework提供了自定义异常处理,我们可以自定义的方式来编写异常处理函数。例如我们想在要创建一个自定义异常函数,
- 注意:这个函数,我们保存到当前主应用中[注意在实际工作中,我们可以设置一个单独的独立的公共目录来保存这种公共的函数/工具/类库]。
- 在项目目录去创建一个 exceptions.py 文件,用来写异常类,然后添加到配置文件中
示例代码:
from rest_framework.views import exception_handler as drf_exception_handler
from django.db import DatabaseError
from rest_framework.response import Response
from rest_framework import status
def custom_exception_handler(exc, context):
"""
自定义异常处理函数
:param exc: 异常对象,本次发生的异常对象
:param context: 字典,异常出现时的执行上下文环境
:return:
"""
response = drf_exception_handler(exc, context)
if response is None:
"""出现drf不能处理的异常"""
if isinstance(exc, DatabaseError):
view = context.get("view")
print('数据库报错,[%s]: %s' % (view, exc))
return Response({"detail":"服务器内部错误!"}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
if isinstance(exc, ZeroDivisionError):
view = context.get("view")
print("0不能作为除数! [%s]: %s" % (view, exc) )
return Response({"detail":"服务器内部错误!"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return response
写号异常了后,在配置文件settings.py中去配置该类
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'drfdemo.exceptions.custom_exception_handler',
}
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'
}
REST framework定义的异常
- APIException drf中所有异常的父类
- ParseError 解析错误
- AuthenticationFailed 认证失败
- NotAuthenticated 尚未认证
- PermissionDenied 权限受限
- NotFound 未找到
- MethodNotAllowed 请求方式不支持
- NotAcceptable 要获取的数据格式不支持
- Throttled 超过限流次数
- ValidationError 校验失败
也就是说,很多的没有在上面列出来的异常,就需要我们在自定义异常中自己处理了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!