Je suis nouveau sur Django-1.6. Lorsque je lance le serveur Django avec DEBUG = True
, il fonctionne parfaitement. Mais lorsque je remplace DEBUG
par False
dans le fichier de paramètres, le serveur s’est arrêté et l’erreur suivante apparaît sur la commande Invite:
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
Après avoir changé ALLOWED_HOSTS
en ["http://127.0.0.1:8000",]
, le message d'erreur suivant s'affiche:
Bad Request (400)
Est-il possible d'exécuter Django sans mode débogage?
La liste ALLOWED_HOSTS
devrait contenir les noms complets noms d’hôtes, pas urls. Laissez le port et le protocole. Si vous utilisez 127.0.0.1
, j'ajouterais aussi localhost
à la liste:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
Vous pouvez également utiliser *
pour faire correspondre tout hôte:
ALLOWED_HOSTS = ['*']
Citer la documentation:
Les valeurs de cette liste peuvent être des noms complets (par exemple,
'www.example.com'
), auquel cas elles seront appariées avec l'en-têteHost
de la requête exactement (sans distinction de casse, sans le port). Une valeur commençant par un point peut être utilisée comme caractère générique de sous-domaine:'.example.com'
correspond àexample.com
,www.example.com
et à tout autre sous-domaine deexample.com
. Une valeur de'*'
correspondra à n'importe quoi; dans ce cas, vous êtes responsable de fournir votre propre validation de l'en-têteHost
(peut-être dans un middleware; dans ce cas, ce middleware doit être répertorié en premier dansMIDDLEWARE_CLASSES
).
Gras accent mien.
La réponse du statut 400 que vous obtenez est due à une exception SuspiciousOperation
qui est générée lorsque votre en-tête d’hôte ne correspond à aucune des valeurs de cette liste.
J'ai eu le même problème et je l'ai corrigé en définissant ALLOWED_HOSTS = ['*']
. Pour résoudre le problème avec les images statiques, vous devez modifier les chemins virtuels dans la configuration de l'environnement comme suit:
Chemin virtuel Répertoire
/static// opt/python/current/app/yourpj/static /
/media// opt/python/actuel/app/Nuevo/media /
J'espère que ça t'aide.
PD: désolé pour mon mauvais anglais.
Pour moi, j'ai eu cette erreur en ne mettant pas USE_X_FORWARDED_Host
à true. De la docs:
Cela ne devrait être activé que si un proxy qui définit cet en-tête est utilisé.
Mon service d'hébergement a écrit explicitement dans sa documentation que ce paramètre doit soit utilisé, et j'obtiens cette erreur 400 si je l'oublie.
J'ai eu le même problème et aucune des réponses n'a résolu mon problème. Pour résoudre la situation de cette manière, il est préférable d'activer la journalisation en ajoutant la configuration suivante à settings.py
temporaire
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, }, }, }
et essayez de tail -f /tmp/debug.log
. et lorsque vous voyez votre problème, vous pouvez le gérer beaucoup plus facilement que le débogage en aveugle.
Mon problème était sur le point de
En-tête HTTP_Host non valide: 'pt_web: 8000'. Le nom de domaine fourni n'est pas valide selon RFC 1034/1035.
et résolvez-le en ajoutant proxy_set_header Host $Host;
au fichier de configuration Nginx et en activant la redirection de port par USE_X_FORWARDED_PORT = True
dans le settings.py
(c'est parce que dans mon cas, j'ai écouté une requête dans Nginx sur le port 8080
et le transmettre à guni
sur le port 8000
Avec DEBUG = False
dans votre fichier de paramètres, vous devez également configurer la liste ALLOWED_Host . Essayez d'inclure ALLOWED_Host = ['127.0.0.1', 'localhost', 'www.yourdomain.com']
Sinon, vous pourriez recevoir une erreur Bad Request (400) de Django.
Pour moi comme j’ai déjà xampp sur 127.0.0.1 et Django sur 127.0.1.1 et j’essayais d’ajouter des hôtes
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'www.yourdomain.com', '*', '127.0.1.1']
et j'ai la même erreur ou (400) mauvaise demande
donc je change l'URL à 127.0.1.1:(le port utilisé)/projet et le tour est joué!
vous devez vérifier quelle est votre adresse de réseau virtuel. Pour moi, j’utilise bitnami Django stack 2.2.3-1 sous Linux, je peux vérifier quel port Django utilise. si vous avez une erreur (400 requêtes incorrectes), alors je suppose que Django sur un réseau virtuel différent .. bonne chance