Aparentemente hay dos maneras diferentes de devolver un error 404 en Django: devolviendo un objeto HttpResponseNotFound
o levantando una excepción Http404
. Mientras uso el primero en mi proyecto, parece que los puntos de vista internos de Django usan principalmente este último. Además del mantra de "La excepción es excepcional", ¿cuál es la diferencia entre ambas formas y cuál debería estar usando?¿Cuál es la diferencia entre devolver un `HttpResponseNotFound` y subir un` Http404` en Django?
Respuesta
HttpResponseNotFound
es como un HttpResponse
normal excepto que envía el código de error 404. Por lo tanto, depende de usted presentar una página 404 adecuada en esa vista, de lo contrario, el navegador mostrará su propio valor predeterminado.
Si se genera una excepción Http404
, Django llamará a su propia vista de error 404. En realidad, esto hace poco más que renderizar la plantilla 404.html y enviarla, usando HttpResponseNotFound
, de hecho. Pero la conveniencia es que usted está especificando la plantilla (y ver, si lo desea) en un solo lugar.
Además de lo que dijo Daniel, generar una excepción Http404
puede ser más flexible ya que le permite generar un 404 p. Ej. desde una función de ayuda más profunda en su pila de llamadas (posiblemente una que normalmente no es HttpResponse
) y confíe en la propagación de excepciones de Python en lugar de tener que crear HttpResponseNotFound
y volver a pasarla manualmente al lugar donde originalmente estaba creando su respuesta.
En voluminoso de lo que dijo Daniel y esmail, como referencia, esto es, literalmente, la definición de HttpResponseNotFound
Django (v1.8):
class HttpResponseNotFound(HttpResponse):
status_code = 404
Y por si acaso, la definición de Http404
:
class Http404(Exception):
pass
- 1. En Python, ¿cuál es la diferencia entre pasar y devolver
- 2. ¿Cuál es la diferencia entre un vector y un vértice?
- 3. ¿Cuál es la diferencia entre un ayudante y un parcial?
- 4. ¿Cuál es la diferencia entre un JavaBean y un POJO?
- 5. ¿Cuál es la diferencia entre un método y un selector?
- 6. ¿Cuál es la diferencia entre un árbol y un directorio?
- 7. ¿Cuál es la diferencia entre un IORef y un MVar?
- 8. ¿Cuál es la diferencia entre un controlador y un servicio?
- 9. ¿Cuál es la diferencia entre un predicado y un funcionador?
- 10. Cuál es la diferencia entre un subproceso y un controlador
- 11. ¿Cuál es la diferencia entre un lenguaje y un marco?
- 12. ¿Cuál es la diferencia entre un nanokernel y un exokernel?
- 13. ¿Cuál es la diferencia entre un algoritmo y un método
- 14. ¿Cuál es la diferencia entre un HashMap y un TreeMap?
- 15. ¿Cuál es la diferencia entre un REPL y un intérprete?
- 16. ¿Cuál es la diferencia entre un "nonce" y un "GUID"?
- 17. Django: ¿cuál es la diferencia entre render(), render_to_response() y direct_to_template()?
- 18. ¿Cuál es la diferencia entre @ y @@ en un módulo?
- 19. ¿Cuál es la diferencia entre. y # en un archivo css?
- 20. ¿Cuál es la diferencia entre django classonlymethod y python classmethod?
- 21. ¿Cuál es la diferencia entre Django y Joomla?
- 22. ¿Cuál es la diferencia entre nohup y un daemon?
- 23. ¿Cuál es la diferencia entre un hilo y una fibra?
- 24. ¿cuál es la diferencia entre -C y gzipping un mysqldump?
- 25. ¿Cuál es la diferencia entre una mónada y un cierre?
- 26. ¿Cuál es la diferencia entre un tema y una plantilla?
- 27. ¿Cuál es la diferencia entre separar un Fragmento y eliminarlo?
- 28. ¿Cuál es la diferencia entre un algoritmo y una función?
- 29. ¿Cuál es la diferencia entre una matriz y un objeto?
- 30. ¿Cuál es la diferencia entre una instancia y un objeto?