Una plataforma practica, con IA integrada y pensada para que mejores desarrollando. Se adapta a tu ritmo, te corrige al instante y te muestra tu progreso real.
Correccion magica
Feedback inteligente
Aprende de cada acierto y fallo con explicaciones claras
Pensado para quienes deben dominar Flask en su día a día
Desarrolladores Python backend
Profesionales que ya programan en Python y quieren especializarse en desarrollo web backend con Flask, creando APIs, servicios internos, paneles administrativos, integraciones y aplicaciones empresariales.
Desarrolladores full-stack
Perfiles que trabajan con frontend y backend, y necesitan construir servicios Flask claros, seguros y bien estructurados para integrarse con aplicaciones React, Vue, Angular, móviles o herramientas corporativas.
Equipos de datos, automatización y scripting
Profesionales que usan Python para análisis, ETL, automatización o procesos internos, y quieren exponer funcionalidades mediante APIs, dashboards o pequeñas aplicaciones web con Flask.
DevOps, SRE y perfiles de plataforma
Equipos que necesitan entender cómo se estructura, configura, despliega, monitoriza y opera una aplicación Flask en entornos Docker, Linux, CI/CD, WSGI, reverse proxy y producción.
Arquitectos software y tech leads
Perfiles responsables de definir estándares, revisar código, evitar deuda técnica, diseñar estructuras mantenibles y guiar equipos que usan Flask en proyectos corporativos.
Desarrolladores que heredan proyectos Flask legacy
Profesionales que deben mantener, refactorizar o modernizar aplicaciones Flask existentes con estructuras poco claras, baja cobertura de tests, extensiones acopladas o despliegues frágiles.
Proveedor con 16 años de experiencia en formación empresarial
Sobre
En Imagina Formación llevamos más de 16 años ayudando a profesionales y empresas a mejorar sus habilidades con formación práctica y totalmente adaptada a sus necesidades. Durante este tiempo, hemos formado a más de 480.000 personas y colaborado con más de 3.500 empresas, convirtiéndonos en un referente en el sector.
16
Años de liderazgo
+480.000
Alumnos formados en Imagina
¿Tienes dudas?
Resolvemos todas tus dudas sobre nuestra formación en Flask
Explora las respuestas a las preguntas que guian a nuestra comunidad. Aqui encontraras claridad sobre como funciona todo, desde el acceso hasta los detalles de los cursos. Si buscas respuestas, este es el lugar para comenzar.
Flask es un framework web WSGI ligero para Python, diseñado para empezar rápido y poder escalar hacia aplicaciones complejas.
La documentación oficial de Flask 3.1.x indica que Flask soporta Python 3.9 o superior, aunque para proyectos nuevos se recomienda trabajar con una versión moderna y mantenida de Python.
Sí. Aunque Flask es ligero, se puede estructurar con application factory, blueprints, extensiones, capas de servicio, repositorios, testing y despliegue profesional para proyectos complejos.
Los blueprints permiten organizar componentes de una aplicación Flask y simplifican el trabajo en aplicaciones grandes, además de facilitar que extensiones registren operaciones sobre la app.
Es un patrón en el que una función crea y configura la aplicación Flask. Facilita testing, configuración por entornos y uso correcto de extensiones no acopladas inicialmente a una app global.
Sí. El curso incluye SQLAlchemy, Flask-SQLAlchemy, modelos, relaciones, sesiones, transacciones, migraciones, repositorios y buenas prácticas de persistencia. Flask-SQLAlchemy simplifica patrones comunes de SQLAlchemy dentro de Flask.
Sí. Se trabaja pytest, fixtures, cliente de pruebas Flask, tests unitarios, integración, APIs, base de datos, autenticación y CI/CD. La documentación oficial de Flask incluye utilidades para testing y usa pytest en sus ejemplos.
Flask permite vistas async, pero sigue siendo una aplicación WSGI. La documentación oficial explica que, al recibir una petición a una vista async, Flask inicia un event loop en un hilo para ejecutarla y devolver la respuesta.
Sí. La documentación oficial explica el despliegue de aplicaciones WSGI usando servidores de producción y menciona opciones como Gunicorn, Waitress, mod_wsgi, uWSGI, gevent y ASGI.
Sí. Al tratarse de formación corporativa orientada a empresa, puede bonificarse hasta el 100% mediante FUNDAE según el crédito disponible y las condiciones aplicables de la organización.
Flask es un framework web WSGI ligero para Python, diseñado para empezar rápido y poder escalar hacia aplicaciones complejas.
La documentación oficial de Flask 3.1.x indica que Flask soporta Python 3.9 o superior, aunque para proyectos nuevos se recomienda trabajar con una versión moderna y mantenida de Python.
Sí. Aunque Flask es ligero, se puede estructurar con application factory, blueprints, extensiones, capas de servicio, repositorios, testing y despliegue profesional para proyectos complejos.
Los blueprints permiten organizar componentes de una aplicación Flask y simplifican el trabajo en aplicaciones grandes, además de facilitar que extensiones registren operaciones sobre la app.
Es un patrón en el que una función crea y configura la aplicación Flask. Facilita testing, configuración por entornos y uso correcto de extensiones no acopladas inicialmente a una app global.
Sí. El curso incluye SQLAlchemy, Flask-SQLAlchemy, modelos, relaciones, sesiones, transacciones, migraciones, repositorios y buenas prácticas de persistencia. Flask-SQLAlchemy simplifica patrones comunes de SQLAlchemy dentro de Flask.
Sí. Se trabaja pytest, fixtures, cliente de pruebas Flask, tests unitarios, integración, APIs, base de datos, autenticación y CI/CD. La documentación oficial de Flask incluye utilidades para testing y usa pytest en sus ejemplos.
Flask permite vistas async, pero sigue siendo una aplicación WSGI. La documentación oficial explica que, al recibir una petición a una vista async, Flask inicia un event loop en un hilo para ejecutarla y devolver la respuesta.
Sí. La documentación oficial explica el despliegue de aplicaciones WSGI usando servidores de producción y menciona opciones como Gunicorn, Waitress, mod_wsgi, uWSGI, gevent y ASGI.
Sí. Al tratarse de formación corporativa orientada a empresa, puede bonificarse hasta el 100% mediante FUNDAE según el crédito disponible y las condiciones aplicables de la organización.
Tema 1: ¿Qué es Flask y qué vamos a construir con él?
Entender Flask como framework web ligero, flexible y orientado a construir aplicaciones WSGI en Python.
Diferenciar Flask de Django, FastAPI, Bottle y frameworks full-stack más opinados.
Resolver cuándo Flask es una buena elección y cuándo puede no ser la opción más adecuada.
Identificar casos de uso reales: APIs internas, microservicios, paneles, backends, integraciones y herramientas corporativas.
Revisar qué piezas forman una aplicación Flask: app, rutas, vistas, request, response, configuración, extensiones y servidor WSGI.
Aclarar qué significa que Flask sea “micro” sin confundirlo con “limitado”.
Presentar el proyecto progresivo que se construirá durante el curso.
Explicar cómo se organizará el aprendizaje: fundamentos, arquitectura, datos, seguridad, testing y producción.
Definir entregables técnicos: API funcional, app modular, tests, Dockerfile, configuración y documentación.
Preparar mentalidad profesional: código simple, explícito, testeable, mantenible y seguro.
Tema 2: Preparar el entorno de desarrollo Python para Flask
Crear un entorno virtual limpio para separar dependencias del sistema.
Instalar Flask y dependencias iniciales con pip, uv o Poetry según estándar del equipo.
Estructurar un repositorio Git desde el primer commit.
Configurar VS Code o PyCharm con linting, formateo, type hints y ejecución de tests.
Crear un archivo `.gitignore` adaptado a Python, entornos virtuales, caches, SQLite y secretos.
Separar dependencias de desarrollo y producción.
Preparar variables de entorno con `.env` sin versionar secretos.
Ejecutar la primera aplicación mínima con `flask run`.
Comprender el modo debug, recarga automática y diferencias con producción.
Documentar el setup para que otro desarrollador pueda levantar el proyecto sin preguntar.
Tema 3: Anatomía de una aplicación Flask mínima
Crear una instancia de `Flask` y entender su papel central en la aplicación.
Definir rutas básicas con decoradores.
Devolver texto, HTML, JSON y respuestas personalizadas.
Interpretar el ciclo request/response desde que llega una petición hasta que se envía la respuesta.
Usar `request`, `response`, `jsonify`, `redirect`, `url_for` y códigos HTTP.
Leer parámetros de ruta, query params, formularios y JSON.
Manejar métodos HTTP como GET, POST, PUT, PATCH y DELETE.
Crear respuestas con headers personalizados cuando proceda.
Evitar mezclar lógica de negocio compleja dentro de la vista.
Identificar desde el principio qué partes deben crecer fuera del archivo principal.
Tema 4: Routing, vistas y diseño de endpoints
Diseñar rutas claras, consistentes y alineadas con recursos de negocio.
Usar variables de ruta con conversores y validaciones básicas.
Separar endpoints de páginas HTML y endpoints de API JSON.
Diseñar rutas RESTful sin caer en nombres ambiguos o verbos innecesarios.
Controlar códigos de estado: 200, 201, 204, 400, 401, 403, 404, 409 y 500.
Crear respuestas de error homogéneas para APIs.
Gestionar redirects, rutas canónicas y generación de URLs con `url_for`.
Aplicar buenas prácticas de naming en funciones de vista.
Evitar endpoints demasiado grandes que hacen demasiadas cosas.
Documentar contratos de entrada y salida de cada endpoint.
Tema 5: Request, response y contexto de aplicación
Comprender los contextos de aplicación y petición en Flask.
Usar `current_app`, `g`, `request` y `session` sin abusar de globales.
Entender por qué algunos objetos parecen globales pero son context-local.
Guardar datos temporales de la petición en `g` cuando tiene sentido.
Evitar pasar información sensible entre capas mediante objetos globales.
Crear hooks con `before_request`, `after_request` y `teardown_request`.
Añadir cabeceras comunes de respuesta desde un punto central.
Registrar métricas simples de tiempo de respuesta.
Manejar errores dentro del contexto correcto.
Diseñar código que pueda probarse sin depender siempre del contexto Flask.
Tema 6: Jinja2 y renderizado de plantillas
Crear plantillas HTML con Jinja2 integradas en Flask.
Pasar variables desde vistas a plantillas.
Usar bloques, herencia, includes y layouts base.
Separar presentación de lógica de negocio.
Crear macros para formularios, tablas, mensajes y componentes repetidos.
Escapar contenido correctamente para reducir riesgos de XSS.
Usar filtros y tests de Jinja con criterio.
Organizar templates por blueprints o áreas funcionales.
Servir archivos estáticos: CSS, JavaScript, imágenes y assets.
Decidir cuándo usar Flask con Jinja y cuándo separar frontend SPA y backend API.
Tema 7: Formularios, validación y mensajes al usuario
Recibir datos de formularios HTML con métodos GET y POST.
Validar campos obligatorios, formatos, longitudes y reglas de negocio.
Gestionar errores de validación de forma clara y reutilizable.
Usar mensajes flash para comunicar éxito, error o advertencia.
Proteger formularios frente a entradas inesperadas.
Separar validación superficial, validación de dominio y validación de persistencia.
Integrar Flask-WTF cuando el proyecto necesita formularios más estructurados.
Aplicar CSRF en formularios que modifican estado.
Mantener formularios accesibles y fáciles de usar.
Crear un flujo completo de alta, edición, validación y feedback.
Tema 8: Sesiones, cookies y estado de usuario
Entender cómo Flask gestiona sesiones firmadas en cookies.
Configurar `SECRET_KEY` de forma segura y fuera del código fuente.
Guardar en sesión solo información mínima y no sensible.
Diferenciar cookie, sesión, token y almacenamiento de servidor.
Configurar opciones seguras de cookie como Secure, HttpOnly y SameSite; la documentación de seguridad de Flask explica estas opciones para reforzar cookies de sesión.
Crear flujos simples de login y logout.
Evitar almacenar objetos grandes o datos privados en cookies.
Gestionar expiración de sesión y comportamiento de remember me.
Preparar pruebas de sesión con cliente de test.
Decidir cuándo usar sesiones Flask y cuándo usar JWT u otro mecanismo.
Tema 9: Configuración profesional por entornos
Separar configuración de desarrollo, testing, staging y producción.
Cargar configuración desde variables de entorno.
Usar objetos, archivos o clases de configuración de forma mantenible.
Proteger secretos, claves, URLs de base de datos y tokens externos.
Entender el papel del instance folder para datos locales que no deben ir al repositorio; la documentación oficial lo presenta como ubicación externa al paquete para configuración local, secretos o archivos de instancia.
Crear valores por defecto seguros para desarrollo.
Validar configuración al arrancar la aplicación.
Evitar condicionales dispersos por todo el código según entorno.
Documentar variables necesarias en `.env.example`.
Preparar configuración lista para Docker y CI/CD.
Tema 10: Application factory y estructura escalable
Entender por qué `create_app()` mejora testabilidad, configuración y modularidad.
Crear una función factory que construye la app según entorno.
Registrar blueprints, extensiones, comandos, errores y configuración dentro de la factory.
Evitar inicializar extensiones atadas directamente a una app global.
Aplicar el patrón recomendado por la documentación oficial: crear extensiones sin vincularlas inicialmente y conectarlas después con la app.
Separar `app`, `config`, `extensions`, `models`, `views`, `services` y `tests`.
Preparar múltiples instancias de app para testing o configuraciones distintas.
Evitar side effects al importar módulos.
Crear una estructura base para proyectos medianos y grandes.
Migrar una app de un solo archivo hacia application factory sin romperla.
Tema 11: Blueprints y modularización por dominios
Entender blueprints como mecanismo para organizar componentes y rutas.
Crear blueprints por área funcional: auth, users, admin, API, billing o reports.
Registrar blueprints dentro de la application factory.
Organizar templates, static files y errores por blueprint.
Evitar blueprints que solo duplican carpetas sin mejorar boundaries.
Diseñar blueprints orientados a dominios y no solo a tipos de archivo.
Crear prefijos de URL coherentes.
Separar blueprints internos, públicos y administrativos.
Compartir servicios comunes sin acoplar módulos.
Preparar una arquitectura modular que permita crecer por features.
Tema 12: Extensiones de Flask y ecosistema
Entender qué es una extensión y por qué Flask delega muchas capacidades en su ecosistema.
Integrar extensiones con el patrón `init_app`.
Usar extensiones para base de datos, migraciones, login, formularios, CORS, caching y APIs.
Evaluar una extensión antes de adoptarla: mantenimiento, compatibilidad, documentación y comunidad.
Evitar añadir extensiones para problemas que se resuelven con código simple.
Centralizar extensiones en un módulo `extensions.py`.
Inicializar extensiones sin crear dependencias circulares.
Diseñar wrappers propios cuando una extensión no debe contaminar todo el proyecto.
Documentar extensiones críticas y configuración asociada.
Preparar estrategia de actualización de dependencias.
Tema 13: Modelado de datos con SQLAlchemy
Entender el papel de SQLAlchemy como ORM y toolkit SQL para Python.
Crear modelos con columnas, relaciones, constraints e índices.
Diferenciar modelo de persistencia y modelo de dominio cuando el proyecto lo requiere.
Integrar Flask-SQLAlchemy cuando se busca configuración y patrones comunes dentro de Flask; su documentación lo describe como una extensión que simplifica el uso de SQLAlchemy con Flask.
Definir relaciones one-to-many, many-to-many y one-to-one.
Controlar lazy loading, joins y consultas eficientes.
Evitar modelos gigantes con lógica de negocio excesiva.
Crear métodos de consulta claros sin dispersar SQL por las vistas.
Manejar sesiones, commits, rollbacks y transacciones.
Diseñar modelos pensando en migraciones, tests y evolución.
Tema 14: Migraciones de base de datos con Alembic y Flask-Migrate
Entender por qué las migraciones son parte del código y no una tarea manual.
Configurar Flask-Migrate sobre SQLAlchemy/Alembic.
Crear migraciones iniciales y revisar scripts antes de aplicarlos.
Diferenciar autogeneración de migración revisada.
Añadir columnas, índices, constraints y relaciones con control.
Gestionar cambios peligrosos: borrado de columnas, renombrados y migraciones de datos.
Aplicar migraciones en local, CI, staging y producción.
Preparar rollback cuando sea posible.
Evitar modificar la base de datos manualmente sin migración.
Documentar estrategia de migraciones para equipos y despliegues.
Tema 15: Repositorios, servicios y separación de responsabilidades
Separar vistas Flask de lógica de negocio.
Crear servicios de aplicación para casos de uso concretos.
Diseñar repositorios para encapsular acceso a datos.
Evitar que una vista valide, consulta, transforma, persiste y responde todo al mismo tiempo.
Definir DTOs o schemas para entrada y salida cuando aporta claridad.
Centralizar reglas de negocio reutilizables.
Diseñar excepciones de dominio y errores controlados.
Crear boundaries entre infraestructura, dominio y presentación.
Preparar servicios testeables sin levantar servidor Flask.
Aplicar arquitectura pragmática sin sobrediseñar proyectos pequeños.
Tema 16: APIs REST con Flask
Diseñar recursos, colecciones y endpoints REST consistentes.
Crear respuestas JSON homogéneas.
Gestionar paginación, filtros, ordenación y búsqueda.
Diseñar payloads de creación, actualización parcial y reemplazo completo.
Usar códigos HTTP correctos y mensajes de error útiles.
Separar contratos de API de modelos internos.
Versionar APIs cuando hay clientes externos o móviles.
Implementar CORS de forma controlada.
Evitar exponer trazas, modelos internos o campos sensibles en respuestas.
Preparar una API completa de CRUD con validación, errores y tests.
Tema 17: Validación y serialización de datos
Validar JSON de entrada antes de ejecutar lógica de negocio.
Usar Marshmallow, Pydantic u otra herramienta según criterio del proyecto.
Separar schema de entrada, schema de salida y modelo de persistencia.
Controlar tipos, rangos, formatos, campos desconocidos y valores nulos.
Crear mensajes de validación comprensibles para clientes de API.
Evitar confiar en datos enviados por frontend o sistemas externos.
Serializar fechas, decimales, enums y relaciones con consistencia.
Implementar validaciones cruzadas entre campos.
Proteger APIs frente a payloads incompletos, excesivos o maliciosos.
Testear validación como parte del contrato de la API.
Tema 18: Autenticación con Flask
Diseñar flujos de registro, login, logout y recuperación de contraseña.
Aplicar hashing seguro de contraseñas con librerías adecuadas.
Integrar Flask-Login para sesiones de usuario cuando el proyecto usa cookies.
Crear autenticación basada en tokens para APIs.
Diferenciar sesiones server-side, cookies firmadas, JWT, API keys y OAuth.
Evitar almacenar contraseñas, tokens o secretos de forma insegura.
Gestionar expiración, revocación y rotación de credenciales.
Proteger endpoints autenticados con decoradores o middlewares claros.
Registrar intentos fallidos y eventos de seguridad relevantes.
Testear escenarios de acceso autorizado, no autenticado y credenciales inválidas.
Tema 19: Autorización, roles y permisos
Diferenciar autenticación y autorización.
Diseñar roles, permisos y políticas de acceso.
Implementar decoradores para restringir endpoints.
Crear permisos por recurso y no solo por rol global.
Evitar checks de permiso duplicados por toda la app.
Centralizar reglas de autorización en servicios o políticas.
Controlar acceso a objetos concretos: usuarios, proyectos, pedidos o documentos.
Proteger endpoints administrativos y acciones sensibles.
Testear accesos permitidos, denegados y edge cases.
Documentar matriz de permisos para negocio y desarrollo.
Tema 20: Seguridad web aplicada a Flask
Revisar riesgos habituales: XSS, CSRF, SQL injection, open redirects, exposición de secretos y errores verbosos.
Configurar cookies seguras, cabeceras HTTP, HTTPS y políticas de sesión.
Aplicar CSRF en formularios y evaluar estrategia en APIs.
Evitar construir SQL concatenando strings.
Escapar contenido en templates y revisar HTML generado.
Proteger subida de archivos: extensiones, tamaño, nombre, ruta y análisis posterior.
Gestionar CORS con orígenes concretos, no con comodines indiscriminados.
Configurar rate limiting en endpoints sensibles.
Evitar mostrar stack traces en producción.
Crear una checklist de seguridad Flask para pull requests y despliegues.
Tema 21: Manejo de errores y respuestas consistentes
Crear manejadores globales para 400, 401, 403, 404, 409, 422 y 500.
Diferenciar errores de usuario, errores de negocio, errores externos y errores internos.
Diseñar respuestas JSON consistentes para APIs.
Mostrar páginas de error útiles en aplicaciones web con Jinja.
Registrar errores internos sin exponer detalles al usuario.
Crear excepciones propias para reglas de negocio.
Traducir excepciones de infraestructura a errores controlados.
Gestionar errores de base de datos, timeouts y servicios externos.
Testear errores igual que los caminos felices.
Preparar códigos de error internos para soporte y observabilidad.
Tema 22: Logging, trazabilidad y observabilidad
Configurar logging estructurado desde el arranque de la app.
Diferenciar logs de acceso, aplicación, errores, seguridad y auditoría.
Añadir correlation IDs o request IDs para seguir peticiones.
Evitar registrar datos sensibles en logs.
Enviar logs a stdout para contenedores y plataformas modernas.
Integrar logs con herramientas corporativas cuando proceda.
Medir tiempos de respuesta y errores por endpoint.
Añadir métricas básicas de negocio y operación.
Preparar health checks y readiness checks.
Usar observabilidad para investigar fallos reales, no solo para cumplir.
Tema 23: Testing con pytest y cliente de pruebas Flask
Configurar pytest para el proyecto.
Crear fixtures para app, cliente, base de datos y usuario autenticado.
Usar el test client de Flask para simular peticiones sin levantar servidor real; la documentación oficial explica utilidades de Flask para testear aplicaciones y usa pytest como framework.
Testear rutas, respuestas, códigos HTTP, JSON y redirects.
Crear tests unitarios para servicios y lógica pura.
Crear tests de integración con base de datos temporal.
Aislar configuración de testing con application factory.
Evitar tests dependientes del orden de ejecución.
Medir cobertura sin convertirla en objetivo vacío.
Integrar tests en CI para bloquear regresiones.
Tema 24: Testing de APIs, base de datos y autenticación
Crear datos de prueba con factories o builders.
Testear endpoints CRUD completos.
Validar permisos por rol y por recurso.
Probar errores de validación y payloads incorrectos.
Testear transacciones, rollbacks y errores de integridad.
Usar SQLite en memoria o PostgreSQL de test según fidelidad necesaria.
Preparar fixtures de usuario, token y sesión.
Validar que respuestas no exponen campos sensibles.
Probar paginación, filtros y ordenación.
Diseñar tests que permitan refactorizar sin miedo.
Tema 25: CLI, comandos personalizados y tareas de mantenimiento
Crear comandos Flask CLI para tareas operativas.
Ejecutar inicialización de base de datos, creación de usuarios y tareas administrativas.
Acceder al contexto de aplicación desde comandos.
Diseñar comandos idempotentes y seguros.
Evitar scripts sueltos fuera del proyecto sin configuración compartida.
Crear comandos para importar datos, limpiar registros o lanzar jobs.
Registrar logs y errores en comandos largos.
Proteger comandos peligrosos con confirmaciones o flags.
Documentar comandos disponibles para operaciones.
Integrar comandos en Docker, CI/CD o tareas programadas.
Tema 26: Tareas en segundo plano y procesos asíncronos
Diferenciar petición HTTP rápida y tarea de larga duración.
Identificar cuándo usar Celery, RQ, Dramatiq o colas equivalentes.
Crear jobs para emails, procesamiento de archivos, informes y llamadas externas lentas.
Integrar worker con la configuración Flask.
Gestionar reintentos, idempotencia y errores.
Evitar bloquear workers web con operaciones pesadas.
Diseñar estados de tarea para consultar progreso.
Registrar resultados y fallos de jobs.
Testear tareas en modo síncrono cuando proceda.
Preparar arquitectura con broker, worker, scheduler y app web.
Tema 27: Async en Flask: posibilidades y límites
Entender que Flask soporta vistas `async def`, pero sigue siendo una aplicación WSGI.
Revisar que la documentación oficial indica que Flask, como app WSGI, usa un worker para manejar un ciclo request/response y ejecuta vistas async mediante un event loop en un hilo.
Usar async para llamadas concurrentes a servicios externos cuando aporta valor.
Evitar esperar mejoras mágicas de rendimiento en endpoints CPU-bound.
No lanzar tareas background persistentes desde una vista async.
Decidir cuándo conviene Flask y cuándo un framework ASGI nativo.
Usar adaptadores WSGI-ASGI si el despliegue lo requiere; la documentación de despliegue ASGI recomienda `asgiref` `WsgiToAsgi` para envolver la app Flask.
Testear vistas async con cuidado.
Documentar límites async para que el equipo no abuse del patrón.
Elegir la estrategia correcta: sync, async puntual, cola o servicio separado.
Tema 28: Caching y rendimiento
Identificar endpoints lentos y consultas repetitivas.
Aplicar caching a respuestas, consultas o cálculos costosos.
Integrar Flask-Caching o soluciones similares cuando encaja.
Usar Redis o memoria local según entorno y criticidad.
Definir claves de cache, expiración e invalidación.
Evitar cachear información sensible o dependiente del usuario sin control.
Optimizar consultas SQL antes de añadir cache.
Medir rendimiento antes y después de cambios.
Implementar compresión y cabeceras de cache HTTP cuando proceda.
Crear una estrategia de rendimiento basada en datos, no en intuición.
Tema 29: Integración con servicios externos
Consumir APIs externas desde servicios aislados.
Configurar timeouts, retries, backoff y circuit breakers simples.
No llamar servicios externos directamente desde vistas complejas.
Validar respuestas externas antes de usarlas.
Gestionar errores de red, autenticación, límites de rate y respuestas parciales.
Proteger API keys y tokens con variables de entorno o vault.
Crear adapters para cambiar proveedor sin tocar toda la aplicación.
Mockear servicios externos en tests.
Registrar llamadas relevantes sin filtrar datos sensibles.
Documentar contratos de integración y escenarios de fallo.
Tema 30: Subida, descarga y procesamiento de archivos
Crear endpoints seguros para subir archivos.
Validar tamaño, extensión, MIME type y nombre de archivo.
Guardar archivos en rutas controladas o almacenamiento externo.
Evitar path traversal y sobrescritura accidental.
Procesar archivos en segundo plano cuando son pesados.
Crear descargas con cabeceras correctas.
Proteger archivos privados con autorización.
Generar PDFs, CSV o Excel desde datos internos.
Limpiar archivos temporales y controlar retención.
Testear flujos de upload y download con cliente de pruebas.
Tema 31: Documentación de APIs y OpenAPI
Documentar endpoints, parámetros, payloads y respuestas.
Crear especificaciones OpenAPI de forma manual o asistida por extensiones.
Mantener documentación alineada con tests.
Añadir ejemplos reales de request y response.
Documentar errores y códigos de estado.
Generar documentación para frontend, integradores y QA.
Evitar documentación que se queda obsoleta tras cada cambio.
Integrar validación de contrato si el proyecto lo requiere.
Crear colecciones Postman o Bruno desde la especificación.
Usar la documentación como parte del contrato entre equipos.
Tema 32: Dockerizar una aplicación Flask
Crear un Dockerfile limpio para entorno Flask.
Separar dependencias, código, usuario no root y variables de entorno.
Usar imágenes base Python adecuadas y mantenerlas actualizadas.
Crear `.dockerignore` para reducir contexto.
Ejecutar Flask con un servidor WSGI en contenedor, no con servidor de desarrollo.
Preparar docker-compose con app, base de datos, Redis y servicios auxiliares.
Gestionar migraciones dentro del flujo de contenedores.
Exponer health checks.
Optimizar tiempos de build y cache de capas.
Documentar comandos para levantar el entorno local reproducible.
Tema 33: Despliegue en producción con WSGI
Entender por qué `flask run` no es el servidor recomendado para producción.
Revisar el papel de servidores WSGI y HTTP server/reverse proxy.
Preparar despliegues con Gunicorn, uWSGI, Waitress o alternativas según entorno.
Tener presente que la documentación oficial de despliegue describe el uso de servidores WSGI y HTTP server, y recoge opciones como Gunicorn, Waitress, mod_wsgi, uWSGI, gevent y ASGI.
Configurar workers, timeouts, logging y variables de entorno.
Colocar Nginx, Apache o proxy gestionado delante cuando proceda.
Servir static files correctamente.
Configurar HTTPS, cabeceras y compresión.
Gestionar migraciones y reinicios sin pérdida de servicio.
Preparar checklist de despliegue inicial y rollback.
Tema 34: CI/CD, calidad automática y revisión de código
Crear pipeline con instalación, linting, type checking, tests y build.
Ejecutar migraciones en entornos controlados.
Bloquear merges si fallan tests críticos.
Añadir Ruff, Black, MyPy o herramientas equivalentes según estándar.
Revisar dependencias vulnerables en CI.
Construir imagen Docker y publicarla en registry.
Desplegar a staging antes de producción.
Gestionar variables y secretos en el sistema de CI.
Crear plantillas de pull request con checklist de seguridad y tests.
Mantener pipeline rápido para que el equipo lo use de verdad.
Tema 35: Arquitectura de proyectos Flask corporativos
Diseñar estructura por dominios o features.
Separar capas: entrada HTTP, servicios, dominio, repositorios, infraestructura y configuración.
Evitar carpetas genéricas que se convierten en cajones de sastre.
Crear convenciones de imports para evitar dependencias circulares.
Diseñar excepciones, schemas, comandos y tests por módulo funcional.
Mantener `app.py` pequeño y delegar en la factory.
Crear documentación de arquitectura para onboarding.
Preparar estrategia de refactor progresivo en proyectos legacy.
Decidir cuándo una app Flask debe dividirse en servicios.
Establecer reglas de arquitectura revisables en code review.
Tema 36: Administración, paneles internos y backoffice
Diseñar paneles administrativos con rutas protegidas.
Crear vistas para gestión de usuarios, recursos, estados y auditoría.
Evaluar Flask-Admin u opciones personalizadas según necesidades.
Evitar exponer acciones peligrosas sin confirmación.
Añadir logs de auditoría para acciones administrativas.
Diseñar formularios internos claros y seguros.
Limitar accesos por roles administrativos.
Crear filtros, búsquedas y exportaciones.
Proteger paneles internos tras VPN, SSO o controles adicionales cuando proceda.
Testear acciones críticas del backoffice.
Tema 37: Flask para microservicios e integraciones internas
Diseñar servicios pequeños con responsabilidad clara.
Crear APIs internas con contratos estables.
Integrar Flask con colas, eventos y otros servicios.
Gestionar configuración, secretos y observabilidad en entornos distribuidos.
Evitar microservicios innecesarios que complican operación.
Diseñar health checks y readiness probes.
Implementar autenticación entre servicios.
Manejar timeouts, retries y fallos parciales.
Documentar dependencias y contratos.
Preparar estrategias de versionado y compatibilidad.
Tema 38: Mantenimiento, actualización y evolución de aplicaciones Flask
Revisar dependencias y cambios de versiones de Flask y extensiones.
Leer changelogs antes de actualizar.
Ejecutar suite de tests antes de subir versión.
Detectar APIs deprecadas y patrones antiguos.
Planificar migraciones de Python y librerías.
Mantener documentación de despliegue actualizada.
Revisar seguridad periódicamente.
Eliminar código muerto, endpoints obsoletos y configuraciones antiguas.
Medir deuda técnica y priorizar mejoras.
Crear roadmap técnico para aplicaciones Flask vivas.
Tema 39: Proyecto final integrador de Flask
Diseñar una aplicación Flask completa basada en un caso empresarial ficticio o anonimizado.
Crear estructura con application factory, blueprints, configuración por entornos y extensiones desacopladas.
Implementar API REST con validación, errores consistentes, paginación y documentación.
Añadir autenticación, autorización, sesiones o tokens según el caso.
Integrar SQLAlchemy, migraciones y repositorios.
Crear servicios de negocio separados de las vistas.
Añadir tests unitarios, integración y funcionales con pytest.
Dockerizar la aplicación con base de datos y servicios auxiliares.
Preparar despliegue WSGI, logs, health checks, configuración segura y CI/CD.
Presentar el proyecto con decisiones arquitectónicas, riesgos, mejoras futuras y plan de mantenimiento.
Una plataforma practica, con IA integrada y pensada para que mejores desarrollando. Se adapta a tu ritmo, te corrige al instante y te muestra tu progreso real.
Correccion magica
Feedback inteligente
Aprende de cada acierto y fallo con explicaciones claras
Tema 1: ¿Qué es Flask y qué vamos a construir con él?
Entender Flask como framework web ligero, flexible y orientado a construir aplicaciones WSGI en Python.
Diferenciar Flask de Django, FastAPI, Bottle y frameworks full-stack más opinados.
Resolver cuándo Flask es una buena elección y cuándo puede no ser la opción más adecuada.
Identificar casos de uso reales: APIs internas, microservicios, paneles, backends, integraciones y herramientas corporativas.
Revisar qué piezas forman una aplicación Flask: app, rutas, vistas, request, response, configuración, extensiones y servidor WSGI.
Aclarar qué significa que Flask sea “micro” sin confundirlo con “limitado”.
Presentar el proyecto progresivo que se construirá durante el curso.
Explicar cómo se organizará el aprendizaje: fundamentos, arquitectura, datos, seguridad, testing y producción.
Definir entregables técnicos: API funcional, app modular, tests, Dockerfile, configuración y documentación.
Preparar mentalidad profesional: código simple, explícito, testeable, mantenible y seguro.
Tema 2: Preparar el entorno de desarrollo Python para Flask
Crear un entorno virtual limpio para separar dependencias del sistema.
Instalar Flask y dependencias iniciales con pip, uv o Poetry según estándar del equipo.
Estructurar un repositorio Git desde el primer commit.
Configurar VS Code o PyCharm con linting, formateo, type hints y ejecución de tests.
Crear un archivo `.gitignore` adaptado a Python, entornos virtuales, caches, SQLite y secretos.
Separar dependencias de desarrollo y producción.
Preparar variables de entorno con `.env` sin versionar secretos.
Ejecutar la primera aplicación mínima con `flask run`.
Comprender el modo debug, recarga automática y diferencias con producción.
Documentar el setup para que otro desarrollador pueda levantar el proyecto sin preguntar.
Tema 3: Anatomía de una aplicación Flask mínima
Crear una instancia de `Flask` y entender su papel central en la aplicación.
Definir rutas básicas con decoradores.
Devolver texto, HTML, JSON y respuestas personalizadas.
Interpretar el ciclo request/response desde que llega una petición hasta que se envía la respuesta.
Usar `request`, `response`, `jsonify`, `redirect`, `url_for` y códigos HTTP.
Leer parámetros de ruta, query params, formularios y JSON.
Manejar métodos HTTP como GET, POST, PUT, PATCH y DELETE.
Crear respuestas con headers personalizados cuando proceda.
Evitar mezclar lógica de negocio compleja dentro de la vista.
Identificar desde el principio qué partes deben crecer fuera del archivo principal.
Tema 4: Routing, vistas y diseño de endpoints
Diseñar rutas claras, consistentes y alineadas con recursos de negocio.
Usar variables de ruta con conversores y validaciones básicas.
Separar endpoints de páginas HTML y endpoints de API JSON.
Diseñar rutas RESTful sin caer en nombres ambiguos o verbos innecesarios.
Controlar códigos de estado: 200, 201, 204, 400, 401, 403, 404, 409 y 500.
Crear respuestas de error homogéneas para APIs.
Gestionar redirects, rutas canónicas y generación de URLs con `url_for`.
Aplicar buenas prácticas de naming en funciones de vista.
Evitar endpoints demasiado grandes que hacen demasiadas cosas.
Documentar contratos de entrada y salida de cada endpoint.
Tema 5: Request, response y contexto de aplicación
Comprender los contextos de aplicación y petición en Flask.
Usar `current_app`, `g`, `request` y `session` sin abusar de globales.
Entender por qué algunos objetos parecen globales pero son context-local.
Guardar datos temporales de la petición en `g` cuando tiene sentido.
Evitar pasar información sensible entre capas mediante objetos globales.
Crear hooks con `before_request`, `after_request` y `teardown_request`.
Añadir cabeceras comunes de respuesta desde un punto central.
Registrar métricas simples de tiempo de respuesta.
Manejar errores dentro del contexto correcto.
Diseñar código que pueda probarse sin depender siempre del contexto Flask.
Tema 6: Jinja2 y renderizado de plantillas
Crear plantillas HTML con Jinja2 integradas en Flask.
Pasar variables desde vistas a plantillas.
Usar bloques, herencia, includes y layouts base.
Separar presentación de lógica de negocio.
Crear macros para formularios, tablas, mensajes y componentes repetidos.
Escapar contenido correctamente para reducir riesgos de XSS.
Usar filtros y tests de Jinja con criterio.
Organizar templates por blueprints o áreas funcionales.
Servir archivos estáticos: CSS, JavaScript, imágenes y assets.
Decidir cuándo usar Flask con Jinja y cuándo separar frontend SPA y backend API.
Tema 7: Formularios, validación y mensajes al usuario
Recibir datos de formularios HTML con métodos GET y POST.
Validar campos obligatorios, formatos, longitudes y reglas de negocio.
Gestionar errores de validación de forma clara y reutilizable.
Usar mensajes flash para comunicar éxito, error o advertencia.
Proteger formularios frente a entradas inesperadas.
Separar validación superficial, validación de dominio y validación de persistencia.
Integrar Flask-WTF cuando el proyecto necesita formularios más estructurados.
Aplicar CSRF en formularios que modifican estado.
Mantener formularios accesibles y fáciles de usar.
Crear un flujo completo de alta, edición, validación y feedback.
Tema 8: Sesiones, cookies y estado de usuario
Entender cómo Flask gestiona sesiones firmadas en cookies.
Configurar `SECRET_KEY` de forma segura y fuera del código fuente.
Guardar en sesión solo información mínima y no sensible.
Diferenciar cookie, sesión, token y almacenamiento de servidor.
Configurar opciones seguras de cookie como Secure, HttpOnly y SameSite; la documentación de seguridad de Flask explica estas opciones para reforzar cookies de sesión.
Crear flujos simples de login y logout.
Evitar almacenar objetos grandes o datos privados en cookies.
Gestionar expiración de sesión y comportamiento de remember me.
Preparar pruebas de sesión con cliente de test.
Decidir cuándo usar sesiones Flask y cuándo usar JWT u otro mecanismo.
Tema 9: Configuración profesional por entornos
Separar configuración de desarrollo, testing, staging y producción.
Cargar configuración desde variables de entorno.
Usar objetos, archivos o clases de configuración de forma mantenible.
Proteger secretos, claves, URLs de base de datos y tokens externos.
Entender el papel del instance folder para datos locales que no deben ir al repositorio; la documentación oficial lo presenta como ubicación externa al paquete para configuración local, secretos o archivos de instancia.
Crear valores por defecto seguros para desarrollo.
Validar configuración al arrancar la aplicación.
Evitar condicionales dispersos por todo el código según entorno.
Documentar variables necesarias en `.env.example`.
Preparar configuración lista para Docker y CI/CD.
Tema 10: Application factory y estructura escalable
Entender por qué `create_app()` mejora testabilidad, configuración y modularidad.
Crear una función factory que construye la app según entorno.
Registrar blueprints, extensiones, comandos, errores y configuración dentro de la factory.
Evitar inicializar extensiones atadas directamente a una app global.
Aplicar el patrón recomendado por la documentación oficial: crear extensiones sin vincularlas inicialmente y conectarlas después con la app.
Separar `app`, `config`, `extensions`, `models`, `views`, `services` y `tests`.
Preparar múltiples instancias de app para testing o configuraciones distintas.
Evitar side effects al importar módulos.
Crear una estructura base para proyectos medianos y grandes.
Migrar una app de un solo archivo hacia application factory sin romperla.
Tema 11: Blueprints y modularización por dominios
Entender blueprints como mecanismo para organizar componentes y rutas.
Crear blueprints por área funcional: auth, users, admin, API, billing o reports.
Registrar blueprints dentro de la application factory.
Organizar templates, static files y errores por blueprint.
Evitar blueprints que solo duplican carpetas sin mejorar boundaries.
Diseñar blueprints orientados a dominios y no solo a tipos de archivo.
Crear prefijos de URL coherentes.
Separar blueprints internos, públicos y administrativos.
Compartir servicios comunes sin acoplar módulos.
Preparar una arquitectura modular que permita crecer por features.
Tema 12: Extensiones de Flask y ecosistema
Entender qué es una extensión y por qué Flask delega muchas capacidades en su ecosistema.
Integrar extensiones con el patrón `init_app`.
Usar extensiones para base de datos, migraciones, login, formularios, CORS, caching y APIs.
Evaluar una extensión antes de adoptarla: mantenimiento, compatibilidad, documentación y comunidad.
Evitar añadir extensiones para problemas que se resuelven con código simple.
Centralizar extensiones en un módulo `extensions.py`.
Inicializar extensiones sin crear dependencias circulares.
Diseñar wrappers propios cuando una extensión no debe contaminar todo el proyecto.
Documentar extensiones críticas y configuración asociada.
Preparar estrategia de actualización de dependencias.
Tema 13: Modelado de datos con SQLAlchemy
Entender el papel de SQLAlchemy como ORM y toolkit SQL para Python.
Crear modelos con columnas, relaciones, constraints e índices.
Diferenciar modelo de persistencia y modelo de dominio cuando el proyecto lo requiere.
Integrar Flask-SQLAlchemy cuando se busca configuración y patrones comunes dentro de Flask; su documentación lo describe como una extensión que simplifica el uso de SQLAlchemy con Flask.
Definir relaciones one-to-many, many-to-many y one-to-one.
Controlar lazy loading, joins y consultas eficientes.
Evitar modelos gigantes con lógica de negocio excesiva.
Crear métodos de consulta claros sin dispersar SQL por las vistas.
Manejar sesiones, commits, rollbacks y transacciones.
Diseñar modelos pensando en migraciones, tests y evolución.
Tema 14: Migraciones de base de datos con Alembic y Flask-Migrate
Entender por qué las migraciones son parte del código y no una tarea manual.
Configurar Flask-Migrate sobre SQLAlchemy/Alembic.
Crear migraciones iniciales y revisar scripts antes de aplicarlos.
Diferenciar autogeneración de migración revisada.
Añadir columnas, índices, constraints y relaciones con control.
Gestionar cambios peligrosos: borrado de columnas, renombrados y migraciones de datos.
Aplicar migraciones en local, CI, staging y producción.
Preparar rollback cuando sea posible.
Evitar modificar la base de datos manualmente sin migración.
Documentar estrategia de migraciones para equipos y despliegues.
Tema 15: Repositorios, servicios y separación de responsabilidades
Separar vistas Flask de lógica de negocio.
Crear servicios de aplicación para casos de uso concretos.
Diseñar repositorios para encapsular acceso a datos.
Evitar que una vista valide, consulta, transforma, persiste y responde todo al mismo tiempo.
Definir DTOs o schemas para entrada y salida cuando aporta claridad.
Centralizar reglas de negocio reutilizables.
Diseñar excepciones de dominio y errores controlados.
Crear boundaries entre infraestructura, dominio y presentación.
Preparar servicios testeables sin levantar servidor Flask.
Aplicar arquitectura pragmática sin sobrediseñar proyectos pequeños.
Tema 16: APIs REST con Flask
Diseñar recursos, colecciones y endpoints REST consistentes.
Crear respuestas JSON homogéneas.
Gestionar paginación, filtros, ordenación y búsqueda.
Diseñar payloads de creación, actualización parcial y reemplazo completo.
Usar códigos HTTP correctos y mensajes de error útiles.
Separar contratos de API de modelos internos.
Versionar APIs cuando hay clientes externos o móviles.
Implementar CORS de forma controlada.
Evitar exponer trazas, modelos internos o campos sensibles en respuestas.
Preparar una API completa de CRUD con validación, errores y tests.
Tema 17: Validación y serialización de datos
Validar JSON de entrada antes de ejecutar lógica de negocio.
Usar Marshmallow, Pydantic u otra herramienta según criterio del proyecto.
Separar schema de entrada, schema de salida y modelo de persistencia.
Controlar tipos, rangos, formatos, campos desconocidos y valores nulos.
Crear mensajes de validación comprensibles para clientes de API.
Evitar confiar en datos enviados por frontend o sistemas externos.
Serializar fechas, decimales, enums y relaciones con consistencia.
Implementar validaciones cruzadas entre campos.
Proteger APIs frente a payloads incompletos, excesivos o maliciosos.
Testear validación como parte del contrato de la API.
Tema 18: Autenticación con Flask
Diseñar flujos de registro, login, logout y recuperación de contraseña.
Aplicar hashing seguro de contraseñas con librerías adecuadas.
Integrar Flask-Login para sesiones de usuario cuando el proyecto usa cookies.
Crear autenticación basada en tokens para APIs.
Diferenciar sesiones server-side, cookies firmadas, JWT, API keys y OAuth.
Evitar almacenar contraseñas, tokens o secretos de forma insegura.
Gestionar expiración, revocación y rotación de credenciales.
Proteger endpoints autenticados con decoradores o middlewares claros.
Registrar intentos fallidos y eventos de seguridad relevantes.
Testear escenarios de acceso autorizado, no autenticado y credenciales inválidas.
Tema 19: Autorización, roles y permisos
Diferenciar autenticación y autorización.
Diseñar roles, permisos y políticas de acceso.
Implementar decoradores para restringir endpoints.
Crear permisos por recurso y no solo por rol global.
Evitar checks de permiso duplicados por toda la app.
Centralizar reglas de autorización en servicios o políticas.
Controlar acceso a objetos concretos: usuarios, proyectos, pedidos o documentos.
Proteger endpoints administrativos y acciones sensibles.
Testear accesos permitidos, denegados y edge cases.
Documentar matriz de permisos para negocio y desarrollo.
Tema 20: Seguridad web aplicada a Flask
Revisar riesgos habituales: XSS, CSRF, SQL injection, open redirects, exposición de secretos y errores verbosos.
Configurar cookies seguras, cabeceras HTTP, HTTPS y políticas de sesión.
Aplicar CSRF en formularios y evaluar estrategia en APIs.
Evitar construir SQL concatenando strings.
Escapar contenido en templates y revisar HTML generado.
Proteger subida de archivos: extensiones, tamaño, nombre, ruta y análisis posterior.
Gestionar CORS con orígenes concretos, no con comodines indiscriminados.
Configurar rate limiting en endpoints sensibles.
Evitar mostrar stack traces en producción.
Crear una checklist de seguridad Flask para pull requests y despliegues.
Tema 21: Manejo de errores y respuestas consistentes
Crear manejadores globales para 400, 401, 403, 404, 409, 422 y 500.
Diferenciar errores de usuario, errores de negocio, errores externos y errores internos.
Diseñar respuestas JSON consistentes para APIs.
Mostrar páginas de error útiles en aplicaciones web con Jinja.
Registrar errores internos sin exponer detalles al usuario.
Crear excepciones propias para reglas de negocio.
Traducir excepciones de infraestructura a errores controlados.
Gestionar errores de base de datos, timeouts y servicios externos.
Testear errores igual que los caminos felices.
Preparar códigos de error internos para soporte y observabilidad.
Tema 22: Logging, trazabilidad y observabilidad
Configurar logging estructurado desde el arranque de la app.
Diferenciar logs de acceso, aplicación, errores, seguridad y auditoría.
Añadir correlation IDs o request IDs para seguir peticiones.
Evitar registrar datos sensibles en logs.
Enviar logs a stdout para contenedores y plataformas modernas.
Integrar logs con herramientas corporativas cuando proceda.
Medir tiempos de respuesta y errores por endpoint.
Añadir métricas básicas de negocio y operación.
Preparar health checks y readiness checks.
Usar observabilidad para investigar fallos reales, no solo para cumplir.
Tema 23: Testing con pytest y cliente de pruebas Flask
Configurar pytest para el proyecto.
Crear fixtures para app, cliente, base de datos y usuario autenticado.
Usar el test client de Flask para simular peticiones sin levantar servidor real; la documentación oficial explica utilidades de Flask para testear aplicaciones y usa pytest como framework.
Testear rutas, respuestas, códigos HTTP, JSON y redirects.
Crear tests unitarios para servicios y lógica pura.
Crear tests de integración con base de datos temporal.
Aislar configuración de testing con application factory.
Evitar tests dependientes del orden de ejecución.
Medir cobertura sin convertirla en objetivo vacío.
Integrar tests en CI para bloquear regresiones.
Tema 24: Testing de APIs, base de datos y autenticación
Crear datos de prueba con factories o builders.
Testear endpoints CRUD completos.
Validar permisos por rol y por recurso.
Probar errores de validación y payloads incorrectos.
Testear transacciones, rollbacks y errores de integridad.
Usar SQLite en memoria o PostgreSQL de test según fidelidad necesaria.
Preparar fixtures de usuario, token y sesión.
Validar que respuestas no exponen campos sensibles.
Probar paginación, filtros y ordenación.
Diseñar tests que permitan refactorizar sin miedo.
Tema 25: CLI, comandos personalizados y tareas de mantenimiento
Crear comandos Flask CLI para tareas operativas.
Ejecutar inicialización de base de datos, creación de usuarios y tareas administrativas.
Acceder al contexto de aplicación desde comandos.
Diseñar comandos idempotentes y seguros.
Evitar scripts sueltos fuera del proyecto sin configuración compartida.
Crear comandos para importar datos, limpiar registros o lanzar jobs.
Registrar logs y errores en comandos largos.
Proteger comandos peligrosos con confirmaciones o flags.
Documentar comandos disponibles para operaciones.
Integrar comandos en Docker, CI/CD o tareas programadas.
Tema 26: Tareas en segundo plano y procesos asíncronos
Diferenciar petición HTTP rápida y tarea de larga duración.
Identificar cuándo usar Celery, RQ, Dramatiq o colas equivalentes.
Crear jobs para emails, procesamiento de archivos, informes y llamadas externas lentas.
Integrar worker con la configuración Flask.
Gestionar reintentos, idempotencia y errores.
Evitar bloquear workers web con operaciones pesadas.
Diseñar estados de tarea para consultar progreso.
Registrar resultados y fallos de jobs.
Testear tareas en modo síncrono cuando proceda.
Preparar arquitectura con broker, worker, scheduler y app web.
Tema 27: Async en Flask: posibilidades y límites
Entender que Flask soporta vistas `async def`, pero sigue siendo una aplicación WSGI.
Revisar que la documentación oficial indica que Flask, como app WSGI, usa un worker para manejar un ciclo request/response y ejecuta vistas async mediante un event loop en un hilo.
Usar async para llamadas concurrentes a servicios externos cuando aporta valor.
Evitar esperar mejoras mágicas de rendimiento en endpoints CPU-bound.
No lanzar tareas background persistentes desde una vista async.
Decidir cuándo conviene Flask y cuándo un framework ASGI nativo.
Usar adaptadores WSGI-ASGI si el despliegue lo requiere; la documentación de despliegue ASGI recomienda `asgiref` `WsgiToAsgi` para envolver la app Flask.
Testear vistas async con cuidado.
Documentar límites async para que el equipo no abuse del patrón.
Elegir la estrategia correcta: sync, async puntual, cola o servicio separado.
Tema 28: Caching y rendimiento
Identificar endpoints lentos y consultas repetitivas.
Aplicar caching a respuestas, consultas o cálculos costosos.
Integrar Flask-Caching o soluciones similares cuando encaja.
Usar Redis o memoria local según entorno y criticidad.
Definir claves de cache, expiración e invalidación.
Evitar cachear información sensible o dependiente del usuario sin control.
Optimizar consultas SQL antes de añadir cache.
Medir rendimiento antes y después de cambios.
Implementar compresión y cabeceras de cache HTTP cuando proceda.
Crear una estrategia de rendimiento basada en datos, no en intuición.
Tema 29: Integración con servicios externos
Consumir APIs externas desde servicios aislados.
Configurar timeouts, retries, backoff y circuit breakers simples.
No llamar servicios externos directamente desde vistas complejas.
Validar respuestas externas antes de usarlas.
Gestionar errores de red, autenticación, límites de rate y respuestas parciales.
Proteger API keys y tokens con variables de entorno o vault.
Crear adapters para cambiar proveedor sin tocar toda la aplicación.
Mockear servicios externos en tests.
Registrar llamadas relevantes sin filtrar datos sensibles.
Documentar contratos de integración y escenarios de fallo.
Tema 30: Subida, descarga y procesamiento de archivos
Crear endpoints seguros para subir archivos.
Validar tamaño, extensión, MIME type y nombre de archivo.
Guardar archivos en rutas controladas o almacenamiento externo.
Evitar path traversal y sobrescritura accidental.
Procesar archivos en segundo plano cuando son pesados.
Crear descargas con cabeceras correctas.
Proteger archivos privados con autorización.
Generar PDFs, CSV o Excel desde datos internos.
Limpiar archivos temporales y controlar retención.
Testear flujos de upload y download con cliente de pruebas.
Tema 31: Documentación de APIs y OpenAPI
Documentar endpoints, parámetros, payloads y respuestas.
Crear especificaciones OpenAPI de forma manual o asistida por extensiones.
Mantener documentación alineada con tests.
Añadir ejemplos reales de request y response.
Documentar errores y códigos de estado.
Generar documentación para frontend, integradores y QA.
Evitar documentación que se queda obsoleta tras cada cambio.
Integrar validación de contrato si el proyecto lo requiere.
Crear colecciones Postman o Bruno desde la especificación.
Usar la documentación como parte del contrato entre equipos.
Tema 32: Dockerizar una aplicación Flask
Crear un Dockerfile limpio para entorno Flask.
Separar dependencias, código, usuario no root y variables de entorno.
Usar imágenes base Python adecuadas y mantenerlas actualizadas.
Crear `.dockerignore` para reducir contexto.
Ejecutar Flask con un servidor WSGI en contenedor, no con servidor de desarrollo.
Preparar docker-compose con app, base de datos, Redis y servicios auxiliares.
Gestionar migraciones dentro del flujo de contenedores.
Exponer health checks.
Optimizar tiempos de build y cache de capas.
Documentar comandos para levantar el entorno local reproducible.
Tema 33: Despliegue en producción con WSGI
Entender por qué `flask run` no es el servidor recomendado para producción.
Revisar el papel de servidores WSGI y HTTP server/reverse proxy.
Preparar despliegues con Gunicorn, uWSGI, Waitress o alternativas según entorno.
Tener presente que la documentación oficial de despliegue describe el uso de servidores WSGI y HTTP server, y recoge opciones como Gunicorn, Waitress, mod_wsgi, uWSGI, gevent y ASGI.
Configurar workers, timeouts, logging y variables de entorno.
Colocar Nginx, Apache o proxy gestionado delante cuando proceda.
Servir static files correctamente.
Configurar HTTPS, cabeceras y compresión.
Gestionar migraciones y reinicios sin pérdida de servicio.
Preparar checklist de despliegue inicial y rollback.
Tema 34: CI/CD, calidad automática y revisión de código
Crear pipeline con instalación, linting, type checking, tests y build.
Ejecutar migraciones en entornos controlados.
Bloquear merges si fallan tests críticos.
Añadir Ruff, Black, MyPy o herramientas equivalentes según estándar.
Revisar dependencias vulnerables en CI.
Construir imagen Docker y publicarla en registry.
Desplegar a staging antes de producción.
Gestionar variables y secretos en el sistema de CI.
Crear plantillas de pull request con checklist de seguridad y tests.
Mantener pipeline rápido para que el equipo lo use de verdad.
Tema 35: Arquitectura de proyectos Flask corporativos
Diseñar estructura por dominios o features.
Separar capas: entrada HTTP, servicios, dominio, repositorios, infraestructura y configuración.
Evitar carpetas genéricas que se convierten en cajones de sastre.
Crear convenciones de imports para evitar dependencias circulares.
Diseñar excepciones, schemas, comandos y tests por módulo funcional.
Mantener `app.py` pequeño y delegar en la factory.
Crear documentación de arquitectura para onboarding.
Preparar estrategia de refactor progresivo en proyectos legacy.
Decidir cuándo una app Flask debe dividirse en servicios.
Establecer reglas de arquitectura revisables en code review.
Tema 36: Administración, paneles internos y backoffice
Diseñar paneles administrativos con rutas protegidas.
Crear vistas para gestión de usuarios, recursos, estados y auditoría.
Evaluar Flask-Admin u opciones personalizadas según necesidades.
Evitar exponer acciones peligrosas sin confirmación.
Añadir logs de auditoría para acciones administrativas.
Diseñar formularios internos claros y seguros.
Limitar accesos por roles administrativos.
Crear filtros, búsquedas y exportaciones.
Proteger paneles internos tras VPN, SSO o controles adicionales cuando proceda.
Testear acciones críticas del backoffice.
Tema 37: Flask para microservicios e integraciones internas
Diseñar servicios pequeños con responsabilidad clara.
Crear APIs internas con contratos estables.
Integrar Flask con colas, eventos y otros servicios.
Gestionar configuración, secretos y observabilidad en entornos distribuidos.
Evitar microservicios innecesarios que complican operación.
Diseñar health checks y readiness probes.
Implementar autenticación entre servicios.
Manejar timeouts, retries y fallos parciales.
Documentar dependencias y contratos.
Preparar estrategias de versionado y compatibilidad.
Tema 38: Mantenimiento, actualización y evolución de aplicaciones Flask
Revisar dependencias y cambios de versiones de Flask y extensiones.
Leer changelogs antes de actualizar.
Ejecutar suite de tests antes de subir versión.
Detectar APIs deprecadas y patrones antiguos.
Planificar migraciones de Python y librerías.
Mantener documentación de despliegue actualizada.
Revisar seguridad periódicamente.
Eliminar código muerto, endpoints obsoletos y configuraciones antiguas.
Medir deuda técnica y priorizar mejoras.
Crear roadmap técnico para aplicaciones Flask vivas.
Tema 39: Proyecto final integrador de Flask
Diseñar una aplicación Flask completa basada en un caso empresarial ficticio o anonimizado.
Crear estructura con application factory, blueprints, configuración por entornos y extensiones desacopladas.
Implementar API REST con validación, errores consistentes, paginación y documentación.
Añadir autenticación, autorización, sesiones o tokens según el caso.
Integrar SQLAlchemy, migraciones y repositorios.
Crear servicios de negocio separados de las vistas.
Añadir tests unitarios, integración y funcionales con pytest.
Dockerizar la aplicación con base de datos y servicios auxiliares.
Preparar despliegue WSGI, logs, health checks, configuración segura y CI/CD.
Presentar el proyecto con decisiones arquitectónicas, riesgos, mejoras futuras y plan de mantenimiento.
Aulas Virtuales Personalizadas
¿Te imaginas tener un Temario 100% Personalizado para tu Empresa?
Pensado para quienes deben dominar Flask en su día a día
Desarrolladores Python backend
Profesionales que ya programan en Python y quieren especializarse en desarrollo web backend con Flask, creando APIs, servicios internos, paneles administrativos, integraciones y aplicaciones empresariales.
Desarrolladores full-stack
Perfiles que trabajan con frontend y backend, y necesitan construir servicios Flask claros, seguros y bien estructurados para integrarse con aplicaciones React, Vue, Angular, móviles o herramientas corporativas.
Equipos de datos, automatización y scripting
Profesionales que usan Python para análisis, ETL, automatización o procesos internos, y quieren exponer funcionalidades mediante APIs, dashboards o pequeñas aplicaciones web con Flask.
DevOps, SRE y perfiles de plataforma
Equipos que necesitan entender cómo se estructura, configura, despliega, monitoriza y opera una aplicación Flask en entornos Docker, Linux, CI/CD, WSGI, reverse proxy y producción.
Arquitectos software y tech leads
Perfiles responsables de definir estándares, revisar código, evitar deuda técnica, diseñar estructuras mantenibles y guiar equipos que usan Flask en proyectos corporativos.
Desarrolladores que heredan proyectos Flask legacy
Profesionales que deben mantener, refactorizar o modernizar aplicaciones Flask existentes con estructuras poco claras, baja cobertura de tests, extensiones acopladas o despliegues frágiles.
Proveedor con 16 años de experiencia en formación empresarial
Sobre
En Imagina Formación llevamos más de 16 años ayudando a profesionales y empresas a mejorar sus habilidades con formación práctica y totalmente adaptada a sus necesidades. Durante este tiempo, hemos formado a más de 480.000 personas y colaborado con más de 3.500 empresas, convirtiéndonos en un referente en el sector.
16
Años de liderazgo
+480.000
Alumnos formados en Imagina
¿Tienes dudas?
Resolvemos todas tus dudas sobre nuestra formación en Flask
Explora las respuestas a las preguntas que guian a nuestra comunidad. Aqui encontraras claridad sobre como funciona todo, desde el acceso hasta los detalles de los cursos. Si buscas respuestas, este es el lugar para comenzar.
Flask es un framework web WSGI ligero para Python, diseñado para empezar rápido y poder escalar hacia aplicaciones complejas.
La documentación oficial de Flask 3.1.x indica que Flask soporta Python 3.9 o superior, aunque para proyectos nuevos se recomienda trabajar con una versión moderna y mantenida de Python.
Sí. Aunque Flask es ligero, se puede estructurar con application factory, blueprints, extensiones, capas de servicio, repositorios, testing y despliegue profesional para proyectos complejos.
Los blueprints permiten organizar componentes de una aplicación Flask y simplifican el trabajo en aplicaciones grandes, además de facilitar que extensiones registren operaciones sobre la app.
Es un patrón en el que una función crea y configura la aplicación Flask. Facilita testing, configuración por entornos y uso correcto de extensiones no acopladas inicialmente a una app global.
Sí. El curso incluye SQLAlchemy, Flask-SQLAlchemy, modelos, relaciones, sesiones, transacciones, migraciones, repositorios y buenas prácticas de persistencia. Flask-SQLAlchemy simplifica patrones comunes de SQLAlchemy dentro de Flask.
Sí. Se trabaja pytest, fixtures, cliente de pruebas Flask, tests unitarios, integración, APIs, base de datos, autenticación y CI/CD. La documentación oficial de Flask incluye utilidades para testing y usa pytest en sus ejemplos.
Flask permite vistas async, pero sigue siendo una aplicación WSGI. La documentación oficial explica que, al recibir una petición a una vista async, Flask inicia un event loop en un hilo para ejecutarla y devolver la respuesta.
Sí. La documentación oficial explica el despliegue de aplicaciones WSGI usando servidores de producción y menciona opciones como Gunicorn, Waitress, mod_wsgi, uWSGI, gevent y ASGI.
Sí. Al tratarse de formación corporativa orientada a empresa, puede bonificarse hasta el 100% mediante FUNDAE según el crédito disponible y las condiciones aplicables de la organización.
Flask es un framework web WSGI ligero para Python, diseñado para empezar rápido y poder escalar hacia aplicaciones complejas.
La documentación oficial de Flask 3.1.x indica que Flask soporta Python 3.9 o superior, aunque para proyectos nuevos se recomienda trabajar con una versión moderna y mantenida de Python.
Sí. Aunque Flask es ligero, se puede estructurar con application factory, blueprints, extensiones, capas de servicio, repositorios, testing y despliegue profesional para proyectos complejos.
Los blueprints permiten organizar componentes de una aplicación Flask y simplifican el trabajo en aplicaciones grandes, además de facilitar que extensiones registren operaciones sobre la app.
Es un patrón en el que una función crea y configura la aplicación Flask. Facilita testing, configuración por entornos y uso correcto de extensiones no acopladas inicialmente a una app global.
Sí. El curso incluye SQLAlchemy, Flask-SQLAlchemy, modelos, relaciones, sesiones, transacciones, migraciones, repositorios y buenas prácticas de persistencia. Flask-SQLAlchemy simplifica patrones comunes de SQLAlchemy dentro de Flask.
Sí. Se trabaja pytest, fixtures, cliente de pruebas Flask, tests unitarios, integración, APIs, base de datos, autenticación y CI/CD. La documentación oficial de Flask incluye utilidades para testing y usa pytest en sus ejemplos.
Flask permite vistas async, pero sigue siendo una aplicación WSGI. La documentación oficial explica que, al recibir una petición a una vista async, Flask inicia un event loop en un hilo para ejecutarla y devolver la respuesta.
Sí. La documentación oficial explica el despliegue de aplicaciones WSGI usando servidores de producción y menciona opciones como Gunicorn, Waitress, mod_wsgi, uWSGI, gevent y ASGI.
Sí. Al tratarse de formación corporativa orientada a empresa, puede bonificarse hasta el 100% mediante FUNDAE según el crédito disponible y las condiciones aplicables de la organización.