Como crear un Middleware personalizado



En Django el Middleware es muy importante, se ejecuta siempre que hay una conexión en cualquier sentido, cliente a servidor o servidor a cliente, y nos puede ser muy util para resolver diferentes situaciones.

Podemos ojear la documentación oficial de Django Docs: Middleware si queremos hacernos una idea mas profunda sobre como funciona.

 

En este ejemplo haremos un middleware que filtre las IP's que pueden tener acceso a nuestro servidor.

Para crear nuestro middleware personalizado tenemos que: crear una carpeta con el nombre "middleware" a la altura de la carpeta de templates, el urls.py etc... (Ruta: miproyecto/miproyecto/middleware)

 

Para que Django reconozca nuestra carpeta middleware debemos recordar de introducir un archivo __init__.py en blanco en la carpeta recién creada 'middleware'

 

Hasta aquí solo hemos creado e inicializado la carpeta de middleware, ahora nos toca crear nuestro middleware personalizado, crearemos un archivo dentro de la carpeta middleware con el nombre filter_ip_middleware.py, y dentro del archivo pondremos el código.

 

filter_ip_middleware.py

class FilterIPMiddleware(object):
    # Check if client IP is allowed
    def process_request(self, request):
        allowed_ips = ['192.168.1.1', '123.123.123.123',]  # Lista de IP's autorizadas
        ip = request.META.get('REMOTE_ADDR')  # Get client IP
        if ip not in allowed_ips:           
           raise Http403  # Aquí generamos un error de "forbidden site"
 
        # Si la IP está dentro de las aceptadas, no hacemos nada
        return None

El último paso sería buscar en el settings.py la línea MIDDLEWARE_CLASSES y añadimos al final de todo la llamada a nuestro middleware, tendría que quedar algo así:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Los middleware de arriba son los que ya vendrían en el settings

    # A continuación escribimos nuestro middleware
    'myproject.middleware.filter_ip_middleware.FilterIPMiddleware'
)

'myproject.middleware.filter_ip_middleware.FilterIPMiddleware':

    - 'myproject': Esto sería el nombre de nuestro proyecto

    - 'middleware': Esto hace alusión a la carpeta donde está incluido nuestro middleware

    - 'filter_ip_middleware': Esto se refiere al nombre del archivo que contiene el codigo de nuestro middleware

    - 'FilterIPMiddleware': Corresponde al nombre de la clase de nuestro middleware

 

Cualquier duda no dudeis en comentar !!

Dejar un comentario

Tienes que esperar para comentar otra vez. Tiempo de espera: