Django дает Bad Request (400), когда DEBUG = False
Я новичок в django-1.6. Когда я запускаю сервер django с DEBUG = True
, он работает отлично. Но когда я изменяю DEBUG
до False
в файле настроек, сервер останавливается и в командной строке появляется следующая ошибка:
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
После того как я изменил ALLOWED_HOSTS
на ["http://127.0.0.1:8000",]
, в браузере я получаю сообщение об ошибке:
Bad Request (400)
Возможно ли запустить Django без режима отладки?
Ответы
Ответ 1
Список 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
, когда заголовок вашего хоста не совпадает ни с одним из значений в этом списке.
Ответ 2
У меня была та же проблема, и я исправил ее, установив ALLOWED_HOSTS = ['*']
и для решения проблемы со статическими образами вы должны изменить виртуальные пути в конфигурации среды следующим образом:
Каталог виртуальных путей
/static//opt/python/current/app/yourpj/static/
/media//opt/python/current/app/Nuevo/media/
Я надеюсь, что это поможет вам.
PD: извините за мой плохой английский.
Ответ 3
Для меня я получил эту ошибку, не установив USE_X_FORWARDED_HOST
в true. Из документов:
Это должно быть разрешено только в том случае, если используется прокси-сервер, который устанавливает этот заголовок.
Мой хостинг написал в своей документации, что этот параметр должен использоваться, и я получаю эту ошибку 400, если я ее забуду.
Ответ 4
У меня была та же проблема, и ни один из ответов не решил мою проблему, для разрешения ситуации, подобной этой, лучше включить ведение журнала, добавив следующую конфигурацию в 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
Ответ 5
С DEBUG = False
в вашем файле настроек вам также потребуется список ALLOWED_HOST.
Попробуйте включить ALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']
В противном случае вы можете получить ошибку Bad Request (400) из django.
Ответ 6
Для меня, как я уже xampp на 127.0.0.1 и django на 127.0.1.1, и я продолжал пытаться добавить хосты
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'www.yourdomain.com', '*', '127.0.1.1']
и я получил ту же ошибку или (400) неверный запрос ![enter image description here]()
поэтому я изменяю URL на 127.0.1.1:( используемый порт)/проект и вуаля!
Вы должны проверить, каков ваш виртуальный сетевой адрес, для меня, так как я использую стек бинами Django 2.2.3-1 в Linux, я могу проверить, какой порт использует Django. если у вас есть ошибка (400 неверных запросов), то я думаю, что Django в другой виртуальной сети.. удачи ![enter image description here]()
Ответ 7
Перейдите к настройкам и найдите файл base.py
Установите разрешенные хосты для
ALLOWED_HOSTS = ['*']