Как мне получить dzhango runningerver, чтобы показать мне DeprecationWarnings и другие полезные сообщения?
Недавно я обновил установку django с 1.2 до 1.3. В моей системе разработчиков я не получал никаких предупреждений об устаревших звонках. Но как только я переместил код на мой сервер производства Apache, я увидел много сообщений "DeprecationWarning" в моих журналах apache.
Итак, как мне также называть серверы для этих сообщений?
В настоящее время я называю это следующим образом:
python manage.py runserver --verbosity 2
Ответы
Ответ 1
Команда runerver игнорирует параметр verbosity: https://code.djangoproject.com/ticket/15132
Я бы рекомендовал настроить регистратор и направлять вывод на stderr: https://docs.djangoproject.com/en/1.3/topics/logging/
Например:
import logging
logger = logging.getLogger('django') # Django 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)
Ответ 2
Python 2.7 отключает отображение DeprecationWarning по умолчанию
Чтобы снова включить его, установите переменную окружения PYTHONWARNINGS в "d":
export 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)
на ваш url.py верхнего уровня.
Я предпочитаю этот подход, потому что он терпит неудачу в тестах и позволяет автоматически определять устаревший код один за другим.