Las señales en Flask son eventos especiales a los que puedes “suscribirte” para que se ejecuten funciones específicas cuando ocurra un evento determinado. Flask incluye una serie de señales útiles para diferentes momentos del ciclo de vida de la solicitud:
request_started:Señal que se dispara cuando una solicitud está a punto de ser procesada por Flask. Permite ejecutar lógica justo al comienzo del proceso de solicitud.
from flask import request_started
def on_request_started(sender, **extra):
print("¡La solicitud ha comenzado!")
request_started.connect(on_request_started, app) request_finished:Señal que se emite cuando Flask ha terminado de procesar la solicitud, pero antes de cerrar la conexión. Ideal para tareas de cierre o limpieza.
from flask import request_finished
def on_request_finished(sender, response, **extra):
print("La solicitud ha terminado.")
request_finished.connect(on_request_finished, app) got_request_exception:Señal que se dispara cuando ocurre una excepción no manejada durante el procesamiento de la solicitud. Esto es útil para registrar errores o notificar sobre excepciones.
from flask import got_request_exception
def on_exception(sender, exception, **extra):
print("Ocurrió una excepción:", exception)
got_request_exception.connect(on_exception, app) request_tearing_down:Señal que se emite justo antes de que Flask cierre el contexto de la solicitud. Es útil para realizar tareas de limpieza final, como cerrar conexiones a bases de datos.
from flask import request_tearing_down
def on_teardown(sender, **extra):
print("Cerrando la solicitud...")
request_tearing_down.connect(on_teardown, app) from flask import Flask, request_started, request_finished, got_request_exception, request_tearing_down
from datetime import datetime
app = Flask(__name__)
# Registro del inicio de la solicitud
@request_started.connect_via(app)
def on_request_started(sender, **extra):
print(f"[{datetime.now()}] Iniciando nueva solicitud")
# Registro de la finalización de la solicitud
@request_finished.connect_via(app)
def on_request_finished(sender, response, **extra):
print(f"[{datetime.now()}] Solicitud completada - Status: {response.status_code}")
# Manejo de excepciones
@got_request_exception.connect_via(app)
def on_request_exception(sender, exception, **extra):
print(f"[{datetime.now()}] Error: {str(exception)}")
# Limpieza final
@request_tearing_down.connect_via(app)
def on_request_tearing_down(sender, **extra):
print(f"[{datetime.now()}] Limpiando recursos")
@app.route('/')
def hello():
return "¡Hola Mundo!"
# Corriendo la app
if __name__ == '__main__':
app.run(debug=True, port=5000) Las señales en Flask son como “notificaciones” que nos permiten ejecutar código cuando ocurren ciertos eventos en nuestra aplicación. Es similar a un sistema de eventos donde podemos “escuchar” y reaccionar a diferentes situaciones.