Este es un ejemplo que utiliza Flask para crear un dashboard interactivo y asíncrono. La aplicación simula una búsqueda de usuarios (con retardo asíncrono) y muestra el resultado en una tabla, todo ello sin recargar la página ni perder la sesión del usuario.
.
├── main.py
├── requirements.txt
└── templates
├── base.html
└── index.html
- main.py: Contiene la aplicación Flask, la definición de rutas y la lógica para generar datos de usuarios. Incluye un endpoint asíncrono (
/heavy-api) que simula una operación de 100 segundos. - requirements.txt: Archivo que lista las dependencias necesarias para ejecutar el proyecto.
- templates/: Carpeta que contiene las plantillas HTML usadas para renderizar el dashboard.
- base.html: Plantilla base que define la estructura general del HTML y carga Bootstrap 5.
- index.html: Vista principal que extiende
base.htmly contiene el código JavaScript para invocar el endpoint asíncrono sin recargar la página.
- Python 3.7 o superior.
- Flask 3.x o superior.
Importante: Para utilizar vistas asíncronas, se recomienda instalar Flask con el extraasync. Por ejemplo:pip install "flask[async]"
-
Clona el repositorio o descarga el código fuente.
-
Navega al directorio del proyecto:
cd ruta/al/directorio-del-proyecto -
opcional/recomendable - crear ambiente virtual
pyenv virtualenv 3.12.0 flask-async -
Instala las dependencias:
pip install -r requirements.txt
Para iniciar el servidor de desarrollo, ejecuta:
python main.pyEl servidor se levantará en http://localhost:5000. Accede a esa URL en tu navegador para visualizar el dashboard.
-
Dashboard Interactivo:
La vista principal muestra un botón ("Buscar usuarios de categoría X") que, al hacer clic, activa una petición asíncrona para obtener usuarios. -
Barra de Carga y Feedback Visual:
Al presionar el botón, se muestra un mensaje y un spinner de carga (usando Bootstrap 5) que indican que se está procesando la solicitud. -
Operación Asíncrona:
La ruta/heavy-apisimula una tarea de larga duración (100 segundos) conawait asyncio.sleep(100), y una vez completada, retorna un JSON con una lista de usuarios generados dinámicamente. -
Actualización Dinámica del Contenido:
La respuesta del endpoint actualiza el contenido de la página (sin recargarla) mostrando una tabla con los usuarios o un mensaje en caso de que no se encuentren resultados.
-
GET /
Renderiza la plantillaindex.html, mostrando el dashboard principal. -
GET /heavy-api
Endpoint asíncrono que simula un proceso lento (100 segundos) y retorna un JSON con un listado de 10 usuarios generados dinámicamente por la funcióngenerar_usuarios(n).
- La función
generar_usuarios(n)enmain.pyes una función de ejemplo para generar datos ficticios. - La plantilla
index.htmlutiliza JavaScript yfetchpara llamar al endpoint/heavy-apiy actualizar el contenido de la página sin recarga, preservando así la sesión. - Se utiliza Bootstrap 5 (vía CDN) para estilizar los componentes visuales como el spinner de carga y la tabla.
Este proyecto es de código abierto y se distribuye bajo la licencia MIT. Puedes modificarlo y adaptarlo a tus necesidades.
Walter Medina