Django дает плохой запрос (400) при DEBUG = False

Я новичок в django-1.6. Когда я запускаю сервер django с DEBUG = True, он работает отлично. Но когда я меняюсь DEBUG to False в файле настроек, затем сервер остановился и выдает следующую ошибку в командной строке:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

после того, как я изменил ALLOWED_HOSTS to ["http://127.0.0.1:8000",], в браузере я получаю сообщение об ошибке:

Bad Request (400)

можно ли запустить Django без режима отладки?

6 ответов


на ALLOWED_HOSTS список должен содержать полное хостов, не URL-адреса. Оставьте порт и протокол. Если вы используете 127.0.0.1, Я бы добавил localhost в список тоже:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

вы также можете использовать * в матче любой ведущий:

ALLOWED_HOSTS = ['*']

цитирую документацию:

значения в этом списке могут быть полные имена (например,'www.example.com'), и в этом случае они будут соответствовать на просьбу Host заголовок ровно (без учета регистра, не включая порт). Значение, начинающееся с точки, может использоваться как подстановочный знак поддомена:'.example.com' будет соответствовать example.com, www.example.com, и любой другой поддомен example.com. Значение '*' будет соответствовать чему угодно; в этом случае вы несете ответственность за обеспечение собственной проверки Host заголовок (возможно, в промежуточном ПО; если это так, это промежуточное ПО должно быть указано первым в MIDDLEWARE_CLASSES).

жирным выделено мной.

статус 400 ответ вы получаете из-за SuspiciousOperation исключение вызывается, когда заголовок хоста не соответствует никаким значениям в этом списке.


для меня, я получил эту ошибку, не установив USE_X_FORWARDED_HOST в true. Из документов:

Это должно быть включено только если прокси, который устанавливает этот заголовок используется.

мой хостинг писал явно в своей документации, что этот параметр должны используется, и я получаю эту ошибку 400, если я ее забуду.


У меня была та же проблема и я исправил это путем установки ALLOWED_HOSTS = ['*'] и для решения проблемы со статическими изображениями вам нужно изменить виртуальные пути в конфигурации среды следующим образом:

Виртуальный Путь                 каталог

/ static / / opt / python / current / app/yourpj/static/
/ media / / opt / python / current / app / Nuevo / media/

надеюсь, это поможет вы.

PD: извините за мой плохой английский.


у меня была такая же проблема и ни один из ответов решить мою проблему, для решения такой ситуации лучше включить ведение журнала, добавив следующий конфиг settings.py временное

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, }

и попытаться tail -f /tmp/debug.log. и когда вы видите свою проблему, вы можете справиться с ней намного проще, чем слепая отладка.

мой вопрос был о

недопустимый заголовок HTTP_HOST: 'pt_web: 8000'. Указанное доменное имя недопустимо в соответствии с RFC 1034/1035.

и решить его, добавив proxy_set_header Host $host; в конфигурационный файл Nginx и включение переадресации портов USE_X_FORWARDED_PORT = True на settings.py (это потому, что в моем случае я слушал запрос в Nginx на порту 8080 и передать его в guni порт 8000


С DEBUG = False в файле настроек вам также нужно настроить список ALLOWED_HOST. Попробуйте включить ALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

в противном случае вы можете получить ошибку Bad Request(400) от django.


перейдите к настройкам и найдите base.py напильник Набор разрешенных хостов ALLOWED_HOSTS = ['*']