Tutorial

Activar depuración de Django en Producción

Cuando ponemos la puesta en escena de nuestros proyectos en Django, debemos desactivar las bonitas vistas que nos otorga la variable DEBUG de nuestro settings, para evitar vulnerabilidades. Así que eso supone que debimos haber comprobado que nuestras aplicaciones funcionen correctamente en el entorno de desarrollo antes de probarlas en producción, pero todos sabemos que es prácticamente imposible que un proyecto puesto en escena tenga el mismo comportamiento que tuvimos en el entorno local.

Investigando un poco sobre como recuperar las pantallas que nos da Django al momento en que una aplicación genera un error sin tocar el DEBUG de nuestro settings, he encontrado una manera y parece que funciona perfectamente.

Lo primero que debemos hacer, es crear un archivo llamado middlewares.py dentro de cualquier aplicación de nuestro proyecto y dentro vamos a escribir el siguiente código:

from django.views.debug import technical_500_response
import sys
from django.conf import settings

class UserBasedExceptionMiddleware(object):
    def process_exception(self, request, exception):
        if request.user.is_superuser or request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
            return technical_500_response(request, *sys.exc_info())

Si se han dado cuenta hemos creado un middleware, los cuales nos ayudan a inyectar funciones o código entre peticiones del navegador y dependiendo su algoritmo, puede cambiar el resultado de lo que se muestra o envía al navegador.

Este middleware nos permite activar el technical_500_response que usa el DEBUG de django en un entorno de producción, siempre y cuando se compruebe que un super usuario esta logeado en la sesión actual del navegador o que la IP corresponda a alguna que tengamos registradas dentro de la variable INTERNAL_IPS. De esta manera nos aseguramos de que las vistas DEBUG solo se muestren para los administradores del sitio y los usuarios normales o anónimos vean un típico SERVER ERROR (500).

Para activarlo debemos agregar al final de nuestra tupla MIDDLEWARE_CLASSES que se encuentra en nuestro settings.py lo siguiente:

'apps.usuarios.middlewares.UserBasedExceptionMiddleware',

Donde 'apps', es el nombre de mi paquete principal de aplicaciones de mi proyecto, 'usuarios' mi aplicación y 'middlewares' el archivo python que hemos creado al principio.

Compartelo en:    

Acerca del Autor

Aarón Díaz R Software Developer

Soy desarrollador de software con experiencia en bases de datos y lenguajes de programación como Python, Java SE, Javascript, C y PHP.

  Comentarios



"El ser de las cosas, no su verdad, es la causa de la verdad en el entendimiento."

- Santo Tomás de Aquino