Django dà Bad Request (400) quando DEBUG = False


254

Sono nuovo di Django-1.6. Quando eseguo il server Django con DEBUG = True, funziona perfettamente. Ma quando cambio DEBUGa Falsenel file delle impostazioni, il server si è fermato e sul prompt dei comandi viene visualizzato il seguente errore:

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

Dopo essere passato ALLOWED_HOSTSa ["http://127.0.0.1:8000",], nel browser viene visualizzato l'errore:

Bad Request (400)

È possibile eseguire Django senza la modalità debug?


Una cosa da ricordare: non aggiungere "http" o "https" inALLOWED_HOSTS
shellbye,

Risposte:


415

L' ALLOWED_HOSTSelenco dovrebbe contenere nomi host completi , non URL. Lascia fuori la porta e il protocollo. Se stai usando 127.0.0.1, aggiungerei localhostanche all'elenco:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

Puoi anche utilizzare *per abbinare qualsiasi host:

ALLOWED_HOSTS = ['*']

Citando la documentazione:

I valori in questo elenco possono essere nomi completi (ad es. 'www.example.com'), Nel qual caso verranno confrontatiHost esattamente con l' intestazione della richiesta (senza distinzione tra maiuscole e minuscole, esclusa la porta ). Un valore che inizia con un periodo può essere utilizzato come un jolly sottodominio: '.example.com'abbinerà example.com, www.example.come qualsiasi altro sottodominio example.com. Un valore di '*'corrisponderà a qualsiasi cosa; in questo caso, l'utente è tenuto a fornire la propria convalida Hostdell'intestazione (forse in un middleware; in tal caso, questo middleware deve essere elencato per primo in MIDDLEWARE_CLASSES).

Enorme enfasi sulla mia .

La risposta di stato 400 che ricevi è dovuta SuspiciousOperationall'eccezione sollevata quando l'intestazione host non corrisponde a nessun valore in quell'elenco.


3
Grazie funziona, ma quando imposto False, arriva un problema, perché tutti i file statici vengono visualizzati come 404. Non riuscivo a capire perché non viene trovato
MegaBytes

@MegaBytes: scusa, non so quale potrebbe essere.
Martijn Pieters

1
Puoi suggerirmi come farlo, visto che il mio progetto sta andando in produzione.
MegaBytes

Ancora una volta, non ho idea nemmeno di cosa ti stai occupando False. Forse potresti pubblicare una nuova domanda?
Martijn Pieters

9
@MegaBytes Quando DEBUG è False, tutti i file statici vengono serviti da STATIC_ROOT, quindi probabilmente ./manage.py collectstaticlo farà.
Blackeagle52,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.