Django:避免在生产中显示错误细节

时间:2017-02-11 18:30:30

标签: python django error-handling

我正在努力确保我的网站得到妥善保护,以免在生产中显示错误的详细信息。

我一直在努力解决这个问题,因为一开始我理解为了避免Django显示错误(模块,代码行等)所需要的只是改变DEBUGTrue中的Falsesettings.py

然而,我意识到Django仍然显示错误细节,所以调查了一下,我开始知道还需要以下内容:

    TEMPLATE_DEBUG = DEBUG
  • settings.py 模板文件夹
  • 中的
  • 404.html500.html

还有什么需要确保用户没有收到这些消息吗?

Django如何处理其他类型的错误,例如400?我看到here400403的处理程序,但我不理解它,我不知道它们是否完全需要用于基本用例。

1 个答案:

答案 0 :(得分:1)

如果DEBUGFalse,则Django不会向用户显示错误详细信息。如果它在你的情况下,最可能的解释是它没有使用你认为它正在使用的settings.py文件(在这种情况下你应该检查Python路径,你运行的目录manage.py ,以及DJANGO_SETTINGS_MODULE)的值,或者在您对settings.py进行更改后没有重新启动Gunicorn / uWSGI / Apache(Django不会像在开发中那样在生产中自动重启)。

对于400和403,只需保留Django默认值即可。如果Django收到一个错误的请求(生产中不太可能,因为这通常会被Apache或nginx捕获),它将调用bad_request(),它只会向用户显示“400错误请求”。同样地,对于其他错误。