2017-02-11 54 views
1

我试图确保我的网站在生产中不会显示错误的详细信息。Django:避免在制作中显示错误详细信息

我已经与此挣扎了一会儿,如在开始的时候我理解的是,为了避免从Django的表示需要的是改变DEBUGTrue到错误(模块,代码行,等等)的所有False in settings.py

但是,我意识到,Django的仍然显示错误信息,所以调查有点多,我才知道,还需要以下:

  • TEMPLATE_DEBUG = DEBUGsettings.py
  • 404.html500.html内模板文件夹

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

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

+0

你可以举一个你试图避免的输出Django输出的例子吗?根据文档,'DEBUG'设置为'False'并且没有自定义处理程序,它只是“服务文本'403 Forbidden'”(例如)。据我所知,它不会提供任何HTTP状态代码中不存在的信息。 –

回答

1

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

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

+0

的确,问题在于我在设置文件夹中有两个设置文件:'local.py'和'production.py',如[here](http://stackoverflow.com/a/15325966/5802289)所述。 'local.py'在我的'.gitignore'中,但不知何故它曾经被包含在版本库中,所以一旦包含它就无关紧要了,它是否包含在'.gitignore'中,它不会被自动删除。为了达到这个目的,它实际上已经从存储库中排除了,所以只包含'production.py',我必须运行'git rm --cached django_project/settings/local.py' – J0ANMM