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 = ['*']