2011-07-16 39 views
17

我最近更新了我的django安裝從1.2到1.3。在我的開發者系統上,我沒有收到任何有關不推薦的調用的警告。但是,一旦我將代碼移到我的生產apache服務器上,我在我的apache日誌中看到了許多「DeprecationWarning」消息。 那麼我怎樣才能調用runserver來處理這些消息呢?如何讓django runserver向我展示DeprecationWarnings和其他有用的消息?

目前,我這樣稱呼它:

python manage.py runserver --verbosity 2 
+2

你運行的是哪個版本的python?見@ chrisv的答案。 – nealmcb

+1

我在運行Python 2.7的MBPro上遇到了這個確切的問題,但是完全相同的代碼顯示了使用Python 2.6的另一個系統上的警告。 @ chrisv的答案解決了這個問題,並且是獲取警告的最佳方式。 – brianz

回答

0

的runserver命令忽略詳細程度選項:https://code.djangoproject.com/ticket/15132

我建議設立一個記錄器和輸出定向到stderr:https://docs.djangoproject.com/en/1.3/topics/logging/

例如:

import logging 
logger = logging.getLogger('django') # Django's catch-all logger 
hdlr = logging.StreamHandler() # Logs to stderr by default 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.WARNING) 
26

Python 2.7 disables the display of DeprecationWarning by default

要重新啓用它,設置環境變量PYTHONWARNINGS爲「d」:

export PYTHONWARNINGS="d"; ./manage.py runserver 
+1

對於windows上的任何人:也可以這樣設置env var: 「set PYTHONWARNINGS = d」 – tutuDajuju

+0

不錯的一個...這很容易忽略,我花了一段時間才找到。它也記錄在[警告文檔](http://docs.python.org/2/library/warnings.html#warning-categories)中:「在2.7版中更改:DeprecationWarning默認情況下被忽略。」 – brianz

+1

誰說我想將這些設置導出到我當前的shell會話中?我只使用:'PYTHONWARNINGS = d ./manage.py runserver' –

3

爲了使您的開發服務器你的測試,以找到並修復它們失敗爲DeprecationWarnings ,您可以通過添加

if settings.DEBUG: 
    import warnings 
    warnings.simplefilter('error', DeprecationWarning) 
# these are less urgent but could also be enabled 
# warnings.simplefilter('error', PendingDeprecationWarning) 

到您的頂級urls.py.將它們轉換爲錯誤

我更喜歡這種方法,因爲它在測試中失敗,並讓我以自動方式逐個找到不推薦使用的代碼。

相關問題