python - español - Django da una Solicitud incorrecta(400) cuando DEBUG=False
django wikipedia (6)
Con DEBUG = False
en su archivo de configuración, también necesita configurar la lista ALLOWED_HOST. Intente incluir ALLOWED_HOST = [''127.0.0.1'', ''localhost'', ''www.yourdomain.com'']
De lo contrario, podría recibir un error de Solicitud incorrecta (400) de django.
Soy nuevo en django-1.6. Cuando ejecuto el servidor django con DEBUG = True
, se está ejecutando perfectamente. Pero cuando cambio DEBUG
a False
en el archivo de configuración, el servidor se detuvo y aparece el siguiente error en el indicador de comando:
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
Después de cambiar ALLOWED_HOSTS
a ["http://127.0.0.1:8000",]
, en el navegador aparece el error:
Bad Request (400)
¿Es posible ejecutar Django sin modo de depuración?
La lista ALLOWED_HOSTS
debe contener nombres de host completos, no urls. Deja fuera el puerto y el protocolo. Si está usando 127.0.0.1
, yo también agregaría localhost
a la lista:
ALLOWED_HOSTS = [''127.0.0.1'', ''localhost'']
También puedes usar *
para hacer coincidir cualquier host:
ALLOWED_HOSTS = [''*'']
Citando la documentación:
Los valores en esta lista pueden ser nombres completamente calificados (por ejemplo,
''www.example.com''
), en cuyo caso se compararán exactamente con el encabezado delHost
la solicitud (sin distinción de mayúsculas y minúsculas, sin incluir el puerto ). Un valor que comienza con un período se puede usar como un comodín de subdominio:''.example.com''
coincidirá conexample.com
,www.example.com
y cualquier otro subdominio deexample.com
. Un valor de''*''
coincidirá con cualquier cosa; en este caso, usted es responsable de proporcionar su propia validación del encabezado delHost
(tal vez en un middleware; si es así, este middleware debe aparecer primero enMIDDLEWARE_CLASSES
).
Énfasis en negrita el mio
La respuesta de estado 400 que obtiene se debe a una excepción SuspiciousOperation
se genera cuando el encabezado de su host no coincide con ningún valor en esa lista.
Para mí, recibí este error al no establecer USE_X_FORWARDED_HOST
en verdadero. De la documentación:
Esto solo debe habilitarse si un proxy que establece este encabezado está en uso.
Mi servicio de alojamiento wrote explícitamente en su documentación que esta configuración debe usarse, y recibo este error 400 si lo olvido.
Tuve el mismo problema y lo solucioné configurando ALLOWED_HOSTS = [''*'']
y para resolver el problema con las imágenes estáticas, tiene que cambiar las rutas virtuales en la configuración del entorno de esta manera:
Directorio de ruta virtual
/ static / / opt / python / current / app / yourpj / static /
/ media / / opt / python / current / app / Nuevo / media /
Espero que te ayude.
PD: perdón por mi mal inglés.
Tuve el mismo problema y ninguna de las respuestas resolvió mi problema, para resolver una situación como esta es mejor habilitar el registro agregando la siguiente configuración a settings.py
temporal
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, }, }, }
y tratar de tail -f /tmp/debug.log
. y cuando ve su problema, puede manejarlo mucho más fácilmente que la depuración ciega.
Mi problema estaba a punto de
Encabezado HTTP_HOST no válido: ''pt_web: 8000''. El nombre de dominio proporcionado no es válido de acuerdo con RFC 1034/1035.
y resuélvalo agregando proxy_set_header Host $host;
al archivo de configuración de Nginx y habilitar el reenvío de puertos con USE_X_FORWARDED_PORT = True
en la settings.py
(es porque en mi caso he escuchado la solicitud en Nginx en el puerto 8080
y se la guni
a guni
en el puerto 8000
Vaya a la configuración y localice el archivo base.py. Configure los hosts permitidos en ALLOWED_HOSTS = [''*'']