Джанго дает неверный запрос (400), когда DEBUG = False

207

Я новичок в 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 без режима отладки?

  • 0
    Помните одну вещь: не добавляйте http или https в ALLOWED_HOSTS
Теги:

5 ответов

355
Лучший ответ

ALLOWED_HOSTS list должен содержать полностью зарегистрированные имена узлов, не. Оставьте порт и протокол. Если вы используете 127.0.0.1, я бы добавил в список localhost:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

Вы также можете использовать * для соответствия любому хосту:

ALLOWED_HOSTS = ['*']

Указание документации:

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

Смелый акцент мой.

Ответ на статус 400, полученный вами, обусловлен SuspiciousOperation exception, возникающим, когда заголовок вашего хоста не соответствует никаким значениям в этом список.

  • 3
    Спасибо, это работает, но когда я установил False, возникает одна проблема, для всех статических файлов отображается как 404. Я не мог понять, почему он дает не найдено
  • 0
    @MegaBytes: извините, я не знаю, что это может быть.
Показать ещё 4 комментария
2

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

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

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

  • 0
    Это необходимо, если ALLOWED_HOSTS = ['*']?
  • 1
    Я думаю, что ALLOWED_HOSTS блокирует весь хост. USE_X_FORWARDED_HOST только определяет, используется ли заголовок HTTP.
2

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

Виртуальный путь                           strong >

/Статический/                           /Opt/питон/ток/приложение/yourpj/статический/
/media/                            /Опт/питон/ток/приложение/Nuevo/СМИ/

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

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

1

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

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

0

Перейдите к настройкам и найдите файл base.py Установите разрешенные хосты для  ALLOWED_HOSTS = ['*']

  • 2
    Не повторяйте принятый ответ. Удалить это, чтобы держать форум в чистоте
  • 0
    не отвечай так, прокомментируй

Ещё вопросы

Сообщество Overcoder
Наверх
Меню