Todo sobre los middlewares personalizados en Django

- Andrés Cruz

Todo sobre los middlewares personalizados en Django

Vamos a hablar sobre Middleware en Django, por qué usarlos, cómo funciona y cómo crear middleware personalizado en Django.

En Django, el middleware es un complemento liviano que se procesa durante la ejecución de solicitudes y respuestas.

El middleware se utiliza para realizar una función en la aplicación. Las funciones pueden ser seguridad, sesión, protección CSRF, autenticación, etc.

 

Tipos de middleware

Hay dos tipos de middleware en Django:

  1. Middleware incorporado
  2. Middleware personalizado

El middleware integrado se proporciona de forma predeterminada en Django cuando crea su proyecto. Puede verificar el Middleware predeterminado en settings.py el archivo de su proyecto.

#built-in moddleware's
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Puede escribir su propio Middleware personalizado para su proyecto. El middleware personalizado puede estar basado en funciones o en clases

Middleware basado en funciones

def simple_middleware(get_response):
    # One-time configuration and initialization.
    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        
        response = get_response(request)
        # Code to be executed for each request after
        # the view are called.
        
        return response
    return middleware

Middleware basado en clases

class CustomMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
print("custom middleware before next middleware/view")
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        response = self.get_response(request)
# Code to be executed for each request after
        # the view are called.
        print("custom middleware after middleware/view")
        
        return response

Una vez que haya escrito el código de middleware, tendrá que conectarlo a su flujo de solicitud/respuesta de Django. Debe agregar la entrada a la sección MIDDLEWARE del archivo setting.py.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # your custom middleware
    'your_app.custom_middleware_file.CustomMiddleware_class',
]

Recuerde agregar el middleware en una posición adecuada, ya que la evaluación del middleware depende de la posición; es decir, en Django primero va a ejecutar los que primero definas, justamente en el orden en el cual se encuentran definidos.

Cosas para recordar al usar middleware

  1. El orden del middleware es importante.
  2. Un middleware puede implementar process_request pero no puede implementar process_response y process_view
  3. Conclusión
  4. Se debe utilizar middleware personalizado cuando desee implementar cierto código para cada solicitud o respuesta, o ambas.
  5. Escriba middlewares personalizados en Django solo cuando tenga requisitos únicos para emplear los mismos, ya que significa una sobrecarga adicional al ciclo de solicitud-respuesta que, en ciertos momentos, puede tener un efecto negativo.

Articulo recomendado

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.