django - Django Rest Framework:如何在 DEBUG = True 的情况下使用 EXCEPTION_HANDLER?
问题描述
我正在为我的 REST API 使用自定义异常处理程序,它使用我的前端知道如何处理的 JSON 数据进行响应。问题是使用设置DEBUG = True
,Django 不使用我的自定义异常处理程序。相反,它使用标准的 HTML 调试页面进行响应,如下所示:
这是我的settings.py
:
DEBUG = True
REST_FRAMEWORK = {
# This doesn't seem to do anything when DEBUG == True
'EXCEPTION_HANDLER': 'stripe_app.utils.custom_exception_handler'
}
...
我知道我可以只设置DEBUG = False
,但如果我这样做了,我还必须更改许多其他使用该DEBUG
变量的东西。
那么,如何将自定义异常处理程序与DEBUG = True
设置一起使用?
我已经在 DRF 文档中寻找答案: https ://www.django-rest-framework.org/api-guide/settings/#exception_handler
和 Django 文档: https ://docs.djangoproject.com/en/3.1/ref/settings/#debug
但我找不到我正在寻找的答案。
编辑
urls.py
根据DRF 文档,我刚刚意识到我忘记在我的根目录中设置以下内容:
handler400 = 'stripe_app.views.bad_request'
handler500 = 'stripe_app.views.server_error'
但是,DEBUG = True
仍然会导致问题。例如,即使我创建了这样的视图:
def always_raise_exception(request):
raise Exception
如果DEBUG == True
是,上述视图会以标准的 Django HTML 调试页面进行响应。
如果DEBUG == False
,它会(正确地)响应 JSON 响应(另一个编辑:我认为这只是因为服务器服务器引发了与 with 不同的异常DEBUG = True
)。
解决方案
您确定使用DEBUG=False
, 异常处理程序吗?
从文档中:
请注意,异常处理程序只会被引发的异常生成的响应调用。它不会用于视图直接返回的任何响应,例如当序列化验证失败时通用视图返回的 HTTP_400_BAD_REQUEST 响应。
从您的示例中,我猜您没有明确提出 404,因此避免了异常处理程序。
推荐阅读
- telerik - 为什么在 Telerik Grid(ASP.NET MVC)上单击按钮清除过滤器时无法重置输入值
- qt - 使用 Qt Installer Framework 在应用程序的不同版本之间切换
- ios - 检索 iPhone/iPad 商店 ID 时出现问题 - Facebook 开发人员
- c# - 尝试添加或更新嵌套对象时如何绕过错误 DbUpdateConcurrencyException?
- java - 向 Firebase 实时数据库中的现有整数数据添加值
- unison - 排除文件夹下的所有内容 *but* 某些文件类型(在任何嵌套级别)
- scala - 在 RDD 中添加列
- bash - 根据 SSID 更改 MacOS 位置 - 在更改之前检查当前位置
- amazon-web-services - AWS SAM 访问多个存储桶
- javascript - 使用 Bootstrap 显示/隐藏嵌套动态表的行