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.