2017-02-11 55 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