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.