Esistono due modi diversi per restituire un errore 404 in Django: restituendo un oggetto HttpResponseNotFound
o sollevando un'eccezione Http404
. Mentre sto usando il primo nel mio progetto, sembra che le opinioni interne di Django utilizzino principalmente quest'ultimo. Oltre al mantra "Eccezione è eccezionale", qual è la differenza tra entrambi i modi e quali dovrei usare?Qual è la differenza tra il ritorno di un `HttpResponseNotFound` e il sollevamento di un` Http404` in Django?
risposta
Un HttpResponseNotFound
è come un normale HttpResponse
eccetto che invia il codice di errore 404. Quindi spetta a te rendere una pagina 404 appropriata in quella vista, altrimenti il browser visualizzerà il proprio valore predefinito.
L'innalzamento di un'eccezione Http404
attiverà Django per chiamare la propria visualizzazione di errore 404. In realtà, questo non fa altro che rendere il modello 404.html e inviarlo, in effetti, utilizzando HttpResponseNotFound
. Ma la praticità è che stai specificando il modello (e guarda, se vuoi) in un unico posto.
In aggiunta a ciò che Daniel ha detto, sollevare un'eccezione Http404
può essere più flessibile in quanto consente di generare un 404 ad es. da una funzione di supporto più profonda nello stack di chiamate (probabilmente di tipo che non restituisce un tipo non HttpResponse
) e si basano sulla propagazione delle eccezioni di Python invece di dover creare un HttpResponseNotFound
e trasferirlo manualmente nella posizione in cui si stava originariamente elaborando la risposta.
In addtion a ciò che ha detto Daniele e Esmail, per riferimento, questo è letteralmente la definizione di HttpResponseNotFound
Django (v1.8):
class HttpResponseNotFound(HttpResponse):
status_code = 404
E per buona misura, la definizione di Http404
:
class Http404(Exception):
pass
- 1. Qual è la differenza tra il panico e un assert?
- 2. Qual è la differenza tra uscita e ritorno?
- 3. Qual è la differenza tra "visualizzazione di ritorno()" e "ritorno di PartialView()"
- 4. In Python, qual è la differenza tra pass e return
- 5. Qual è la differenza tra un controller e un servizio?
- 6. Qual è la differenza tra un vettore e un vertice?
- 7. Qual è la differenza tra un pacchetto e un intento?
- 8. Qual è la differenza tra il punto di controllo spark e il persistere su un disco
- 9. Qual è la differenza tra un "nonce" e un "GUID"?
- 10. Qual è la differenza tra un tema e un modello?
- 11. Qual è la differenza tra un nodo e un vertice?
- 12. Qual è la differenza tra un helper e un parziale?
- 13. Qual è la differenza tra un JavaBean e un POJO?
- 14. Qual è la differenza tra% e %% in un file cmd?
- 15. Qual è la differenza tra un algoritmo e un metodo
- 16. Qual è la differenza tra un RoutedCommand e un RoutedUICommand?
- 17. Qual è la differenza tra un array e un oggetto?
- 18. Qual è la differenza tra il callback e la promessa
- 19. qual è la differenza tra @ e @@ in un modulo?
- 20. Qual è la differenza tra un dizionario e un array?
- 21. Qual è la differenza tra un modello e un percorso?
- 22. Qual è la differenza tra un REPL e un interprete?
- 23. Django 1.8 - qual è la differenza tra migrare e makemigrations?
- 24. Qual è la differenza tra l'ambito di un oggetto e il suo contesto in javascript?
- 25. Qual è la differenza tra. e # in un file css?
- 26. Qual è la differenza tra il formato OMF e COFF?
- 27. qual è la differenza tra i modelli e il polimorfismo
- 28. Qual è la differenza tra NSAutoreleasePool e il blocco @autoreleasepool?
- 29. Qual è la differenza tra il valore di ritorno o Promise.resolve da allora()
- 30. Qual è la differenza tra NSInvocation e il blocco?