【发布时间】:2021-07-08 09:05:06
【问题描述】:
我正在为我的 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 docs:
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响应(另一个编辑:我认为这只是因为服务器服务器引发了与DEBUG = True不同的异常)。
【问题讨论】:
标签: django django-rest-framework