it-swarm.com.de

Django gibt Bad Request (400), wenn DEBUG = False ist

Ich bin neu bei Django-1.6. Wenn ich den Django-Server mit DEBUG = True betreibe, läuft er einwandfrei. Wenn ich jedoch DEBUG in False in der Einstellungsdatei ändere, wurde der Server gestoppt und der Befehl Prompt zeigt den folgenden Fehler an:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

Nachdem ich ALLOWED_HOSTS in ["http://127.0.0.1:8000",] geändert habe, erhalte ich im Browser die Fehlermeldung:

Bad Request (400)

Ist es möglich, Django ohne Debug-Modus auszuführen?

223
codeimplementer

Die ALLOWED_HOSTS-Liste sollte vollständig qualifizierte Hostnamen, nicht-URLs enthalten. Lassen Sie den Port und das Protokoll aus. Wenn Sie 127.0.0.1 verwenden, würde ich auch localhost zur Liste hinzufügen:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

Sie können auch * verwenden, um mit any Host übereinzustimmen:

ALLOWED_HOSTS = ['*']

Zitieren der Dokumentation:

Bei den Werten in dieser Liste kann es sich um vollständig qualifizierte Namen handeln (z. B. 'www.example.com'). In diesem Fall werden sie mit gegen den Host-Header der Anforderung exakt (ohne Berücksichtigung der Groß- und Kleinschreibung, ohne Port) abgeglichen. Ein mit einem Punkt beginnender Wert kann als Platzhalter für eine Unterdomäne verwendet werden: '.example.com' stimmt mit example.com, www.example.com und einer beliebigen anderen Unterdomäne von example.com überein. Ein Wert von '*' stimmt mit allem überein; In diesem Fall müssen Sie Ihre eigene Validierung des Host-Headers angeben (möglicherweise in einer Middleware; wenn dies der Fall ist, muss diese Middleware zuerst in MIDDLEWARE_CLASSES aufgeführt sein).

Mutige Hervorhebung meiner.

Die Status-400-Antwort, die Sie erhalten, ist auf eine SuspiciousOperation-Ausnahme zurückzuführen, die ausgelöst wird, wenn der Host-Header mit keinen Werten in dieser Liste übereinstimmt.

376
Martijn Pieters

Ich hatte das gleiche Problem und habe es behoben, indem ich ALLOWED_HOSTS = ['*'] eingestellt habe. Um das Problem mit den statischen Images zu lösen, müssen Sie die virtuellen Pfade in der Umgebungskonfiguration folgendermaßen ändern:

Virtueller Pfad Verzeichnis

/static// opt/python/current/app/yourpj/static /
/media// opt/python/current/app/Nuevo/media /

Ich hoffe es hilft dir.

PD: Entschuldigung für mein schlechtes Englisch.

3
Jorge

Ich habe diesen Fehler erhalten, indem ich USE_X_FORWARDED_Host nicht auf true gesetzt habe. Aus den Dokumenten: 

Dies sollte nur aktiviert werden, wenn ein Proxy verwendet wird, der diesen Header setzt.

Mein Hosting-Service schrieb explizit in seiner Dokumentation, dass diese Einstellung muss verwendet werden, und ich bekomme diesen 400-Fehler, wenn ich es vergesse. 

3
Keith

Ich hatte das gleiche Problem und keine der Antworten löste mein Problem. Um diese Situation zu lösen, ist es besser, die Protokollierung zu aktivieren, indem die folgende Konfiguration zu settings.py temporär hinzugefügt wird

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, }, }, }

und versuchen Sie tail -f /tmp/debug.log. und wenn Sie Ihr Problem sehen, können Sie es viel einfacher handhaben als blindes Debuggen.

Meine Ausgabe war dabei 

Ungültiger HTTP_Host-Header: 'pt_web: 8000'. Der angegebene Domainname ist gemäß RFC 1034/1035 nicht gültig.

und lösen Sie es auf, indem Sie proxy_set_header Host $Host; zur Nginx-Konfigurationsdatei hinzufügen und die Portweiterleitung durch USE_X_FORWARDED_PORT = True im settings.py aktivieren. Dies liegt daran, dass ich in Nginx die Anforderung in Port 8080 abgerufen und an guni an Port 8000 übergeben

1
Yusef Mohamadi

Mit DEBUG = False in Ihrer Einstellungsdatei müssen Sie auch die ALLOWED_Host-Liste einrichten . Versuchen Sie, ALLOWED_Host = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

Andernfalls erhalten Sie möglicherweise einen Fehler von Bad Django (400).

0
Abhishek Lodha

Für mich, da ich bereits xampp auf 127.0.0.1 und Django auf 127.0.1.1 habe und immer wieder versuche, Hosts hinzuzufügen

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'www.yourdomain.com', '*', '127.0.1.1']

und ich habe den gleichen Fehler oder (400) schlechte Anfrage enter image description here

also ändere ich die url auf 127.0.1.1:( den verwendeten port)/project und voila!

sie müssen überprüfen, was Ihre virtuelle Netzwerkadresse ist, für mich, da ich Bitnami Django Stack 2.2.3-1 unter Linux verwende, kann ich überprüfen, welchen Port Django verwendet. Wenn Sie einen Fehler haben (400 schlechte Anfrage), dann denke ich Django in verschiedenen virtuellen Netzwerk .. viel Glück enter image description here

0
Muhamed Noaman