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?
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 denHost
-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 mitexample.com
,www.example.com
und einer beliebigen anderen Unterdomäne vonexample.com
überein. Ein Wert von'*'
stimmt mit allem überein; In diesem Fall müssen Sie Ihre eigene Validierung desHost
-Headers angeben (möglicherweise in einer Middleware; wenn dies der Fall ist, muss diese Middleware zuerst inMIDDLEWARE_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.
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.
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.
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
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).
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
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