我正在努力确保我的网站得到妥善保护,以免在生产中显示错误的详细信息。
我一直在努力解决这个问题,因为一开始我理解为了避免Django显示错误(模块,代码行等)所需要的只是改变DEBUG
从True
中的False
到settings.py
。
然而,我意识到Django仍然显示错误细节,所以调查了一下,我开始知道还需要以下内容:
TEMPLATE_DEBUG = DEBUG
中settings.py
模板文件夹404.html
和500.html
还有什么需要确保用户没有收到这些消息吗?
Django如何处理其他类型的错误,例如400
?我看到here有400
和403
的处理程序,但我不理解它,我不知道它们是否完全需要用于基本用例。
答案 0 :(得分:1)
如果DEBUG
为False
,则Django不会向用户显示错误详细信息。如果它在你的情况下,最可能的解释是它没有使用你认为它正在使用的settings.py
文件(在这种情况下你应该检查Python路径,你运行的目录manage.py
,以及DJANGO_SETTINGS_MODULE
)的值,或者在您对settings.py
进行更改后没有重新启动Gunicorn / uWSGI / Apache(Django不会像在开发中那样在生产中自动重启)。
对于400和403,只需保留Django默认值即可。如果Django收到一个错误的请求(生产中不太可能,因为这通常会被Apache或nginx捕获),它将调用bad_request()
,它只会向用户显示“400错误请求”。同样地,对于其他错误。