Mientras se desarrolla, tener la posibilidad de ver tracebacks y errores en vivo en tu navegador es extremadamente útil. Django posee mensajes de depuración "vistosos" e informativos específicamente para hacer la tarea de depuración más fácil.
Sin embargo, si esos errores son visualizados una vez que el sitio pasa a producción, pueden revelar aspectos de tu código o configuración que podrían ser de utilidad a un atacante.
Es más, los errores y tracebacks no son para nada útiles para los usuarios finales. La filosofía de Django es que los visitantes al sitio nunca deben ver mensajes de error relacionados a una aplicación. Si tu código genera una excepción no tratada, un visitante al sitio no debería ver un traceback completo — ni ninguna pista de fragmentos de código o mensajes de error (destinados a programadores) de Python. En cambio, el visitante debería ver un amistoso mensaje "Esta página no está disponible".
Naturalmente, por supuesto, los desarrolladores necesitan ver tracebacks para depurar problemas en su código. Así que el framework debería ocultar todos los mensajes de error al público pero debería mostrarlos a los desarrolladores del sitio.
19.8.1. La solución
Django tiene un sencillo control que gobierna la visualización de esos mensajes
de error. Si se fija la variable de configuración DEBUG
al valor True
,
los mensajes de error serán visualizados en el navegador. De otra forma, Django
retornará un mensaje HTTP 500 ("Error interno del servidor") y renderizará una
plantilla de error provista por ti. Esta plantilla de error tiene el nombre
500.html
y debe estar situada en la raíz de uno de tus directorios de
plantillas.
Dado que los desarrolladores aun necesitan ver los errores que se generan en un
sitio en producción, todos los errores que se manejen de esta manera dispararán
el envío de un email con el traceback completo a las direcciones de correo
configuradas en la variable ADMINS
.
Los usuarios que implementen en conjunto con Apache y mod_python deben también
asegurarse que tienen PythonDebug Off
en sus archivos de configuración de
Apache; esto suprimirá cualquier error que pudiera ocurrir aun antes de que
Django se haya cargado.