Decorador en Flask: Guía Completa con Ejemplos

  Concepto básico

Un decorador en Flask es una función especial que se usa para modificar el comportamiento de otras funciones o métodos. En el contexto de Flask, los decoradores son muy comunes y se utilizan principalmente para asociar funciones con rutas o para agregar funcionalidades adicionales a las vistas y a la aplicación en general.

¿Cómo funcionan los decoradores en Flask?

Flask permite usar decoradores para realizar tareas como:

1. Asociar rutas con vistas

El decorador más común en Flask es el de @app.route, que se usa para asociar una URL o ruta con una función de vista. Esta función se ejecutará cuando un usuario acceda a esa URL.

python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
  return "¡Hola, mundo!"

# Corriendo la app 
if __name__ == '__main__':
  app.run(debug=True, port=5000)

En este caso, el decorador @app.route('/') indica que la función home() debe ejecutarse cuando un usuario visite la página principal (/).

2. Ejecutar funciones antes o después de una solicitud

Flask ofrece varios decoradores para realizar tareas antes o después de manejar una solicitud, como @app.before_request y @app.after_request.

@app.before_request:

Se ejecuta antes de cada solicitud, útil para configurar algo en cada petición (como autenticación).

python
@app.before_request
def before_request_func():
  print("Esto se ejecuta antes de cada solicitud.")

@app.after_request:

Se ejecuta después de que Flask haya procesado la solicitud, pero antes de enviar la respuesta al cliente.

python
@app.after_request
def after_request_func(response):
  print("Esto se ejecuta después de cada solicitud.")
  return response

Crear decoradores personalizados:

Puedes crear tus propios decoradores para agregar funcionalidades adicionales a las vistas. Por ejemplo, un decorador para verificar si un usuario está autenticado:

python
def require_login(f):
def wrap(*args, **kwargs):
  if not session.get('logged_in'):
      return redirect(url_for('login'))
  return f(*args, **kwargs)
return wrap

@app.route('/profile')
@require_login
def profile():
  return "Perfil del usuario"
  Por qué se usan los decoradores en Flask

  • Simplicidad y claridad: Permiten asociar directamente funciones o acciones con rutas, vistas y otros eventos en la aplicación.
  • Modularidad: Te permiten añadir funcionalidades a las vistas sin necesidad de modificar el código base, facilitando su reutilización.
  • Manejo de eventos: Son útiles para ejecutar código adicional de manera centralizada, como autenticación, logging, manejo de errores, etc.

En resumen, los decoradores en Flask son herramientas poderosas que permiten añadir funcionalidades de manera sencilla y modular a tus vistas y la aplicación en general.