Curso Flask

Microframework web para Python, simple y flexible.

Certificado profesional
Flask
Flask
Framework
20 horas
8 módulos
53 lecciones
14 ejercicios
Armin Ronacher
Documentación oficial
Actualizado: 04/05/2026

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

Descripción del curso Flask

Flask es un microframework web para Python que se caracteriza por su simplicidad, flexibilidad y facilidad de uso. Desarrollado por Armin Ronacher y mantenido hoy por el colectivo Pallets Projects, Flask adopta una filosofía minimalista que permite a los desarrolladores construir aplicaciones web desde lo básico, añadiendo únicamente las funcionalidades que necesitan. La línea 3.x es la versión vigente en 2026, con Python 3.9+ como requisito mínimo, soporte nativo para async/await, rotación de claves con SECRET_KEY_FALLBACKS y una base compartida con Werkzeug 3 y Jinja 3.

A diferencia de frameworks más pesados como Django, Flask no impone una estructura rígida ni incluye componentes predefinidos como ORM o sistemas de autenticación. Esta característica lo convierte en una excelente opción tanto para principiantes que desean entender los fundamentos del desarrollo web como para desarrolladores experimentados que prefieren tener control total sobre la arquitectura de sus aplicaciones.

Características fundamentales

Flask se basa en dos componentes principales: Werkzeug y Jinja2. Werkzeug es una biblioteca WSGI (Web Server Gateway Interface) que maneja las peticiones HTTP y proporciona utilidades para el desarrollo web, mientras que Jinja2 es el motor de plantillas que permite generar contenido HTML dinámico.

La arquitectura modular de Flask permite integrar extensiones según las necesidades del proyecto. Estas extensiones cubren funcionalidades como manejo de bases de datos, autenticación, validación de formularios, y muchas otras características que no están incluidas en el núcleo del framework.

El sistema de rutas de Flask utiliza decoradores Python para asociar URLs con funciones, lo que resulta en un código limpio y fácil de entender:

from flask import Flask

app = Flask(__name__)

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

@app.route('/usuario/<nombre>')
def perfil_usuario(nombre):
    return f'Perfil de {nombre}'

Desarrollo de APIs REST

Flask es especialmente popular para el desarrollo de APIs REST debido a su simplicidad y flexibilidad. El framework proporciona herramientas nativas para manejar diferentes métodos HTTP (GET, POST, PUT, DELETE) y trabajar con datos JSON de manera eficiente.

La gestión de parámetros de ruta y query strings en Flask es intuitiva. Los parámetros de ruta se definen directamente en el decorador de la ruta, mientras que los query strings se acceden a través del objeto request:

from flask import Flask, request

@app.route('/productos/<int:producto_id>')
def obtener_producto(producto_id):
    categoria = request.args.get('categoria')
    return f'Producto {producto_id} en categoría {categoria}'

El manejo de cabeceras HTTP y códigos de estado es fundamental en el desarrollo de APIs. Flask permite acceder a las cabeceras de las peticiones y personalizar las respuestas con códigos de estado específicos y cabeceras personalizadas.

Para el manejo de errores, Flask proporciona decoradores que permiten capturar excepciones específicas y devolver respuestas apropiadas:

@app.errorhandler(404)
def no_encontrado(error):
    return {'error': 'Recurso no encontrado'}, 404

@app.errorhandler(500)
def error_servidor(error):
    return {'error': 'Error interno del servidor'}, 500

Integración con bases de datos

Aunque Flask no incluye un ORM por defecto, se integra perfectamente con SQLAlchemy 2, el ORM más popular de Python. Esta combinación permite trabajar con bases de datos relacionales de manera eficiente y pythónica, usando anotaciones de tipo (Mapped[int], mapped_column) y un API unificado a través de select().

SQLAlchemy proporciona tanto un ORM completo como herramientas de bajo nivel para trabajar directamente con SQL. En el contexto de Flask, se utiliza principalmente la extensión Flask-SQLAlchemy que simplifica la configuración y el uso del ORM:

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://usuario:password@localhost/basedatos'
db = SQLAlchemy(app)

class Usuario(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nombre = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

Las operaciones CRUD (Create, Read, Update, Delete) se realizan de manera intuitiva utilizando los métodos proporcionados por SQLAlchemy. El ORM también permite realizar consultas complejas con joins y filtros, manteniendo la legibilidad del código Python.

Flask-Migrate es otra extensión esencial que gestiona las migraciones de base de datos, permitiendo versionar y aplicar cambios en el esquema de la base de datos de manera controlada.

Patrón MVC y plantillas

Flask soporta perfectamente el patrón MVC (Modelo-Vista-Controlador), aunque no lo impone. Los modelos se definen utilizando SQLAlchemy, las vistas se implementan con plantillas Jinja2, y los controladores son las funciones asociadas a las rutas.

Jinja2 es un motor de plantillas potente que permite generar HTML dinámico de manera segura. Su sintaxis es similar a Python y proporciona características como herencia de plantillas, filtros, y estructuras de control:

<!DOCTYPE html>
<html>
<head>
    <title>{{ titulo }}</title>
</head>
<body>
    <h1>Bienvenido, {{ usuario.nombre }}</h1>
    {% for producto in productos %}
        <div>{{ producto.nombre }} - {{ producto.precio }}€</div>
    {% endfor %}
</body>
</html>

La validación de formularios se puede realizar utilizando WTForms, una biblioteca que proporciona una manera declarativa de definir formularios y sus validaciones. Esta integración permite crear formularios robustos con validación tanto del lado del cliente como del servidor.

Los archivos estáticos como CSS, JavaScript e imágenes se sirven automáticamente desde la carpeta static, y Jinja2 proporciona funciones auxiliares para generar URLs hacia estos recursos.

Organización y escalabilidad

Para aplicaciones más grandes, Flask proporciona Blueprints, que permiten organizar la aplicación en módulos reutilizables. Los Blueprints facilitan la separación de funcionalidades y mejoran la mantenibilidad del código:

from flask import Blueprint

auth_bp = Blueprint('auth', __name__, url_prefix='/auth')

@auth_bp.route('/login')
def login():
    return 'Página de login'

# En la aplicación principal
app.register_blueprint(auth_bp)

Los flash messages proporcionan una manera de mostrar mensajes temporales al usuario, como confirmaciones de acciones o mensajes de error. Estos mensajes se almacenan en la sesión y se muestran en la siguiente petición.

Seguridad

La seguridad es un aspecto crucial en cualquier aplicación web. Flask proporciona herramientas y se integra con extensiones especializadas para implementar medidas de seguridad robustas.

El manejo de variables de entorno es fundamental para mantener información sensible como claves de API y credenciales de base de datos fuera del código fuente. Flask puede configurarse fácilmente para leer estas variables del entorno del sistema.

Para la autenticación de usuarios, Flask-Login proporciona gestión de sesiones de usuario, mientras que el hashing de contraseñas se puede implementar utilizando bibliotecas como bcrypt, que proporcionan algoritmos seguros para el almacenamiento de contraseñas.

La autorización se puede implementar utilizando decoradores personalizados que verifican los permisos del usuario antes de ejecutar una función de vista. Para APIs, Flask-JWT-Extended proporciona una implementación completa de autenticación basada en tokens JWT.

Flask-CORS es esencial para aplicaciones que necesitan manejar peticiones desde diferentes dominios, proporcionando configuración flexible para las políticas de CORS (Cross-Origin Resource Sharing).

Testing

Flask incluye soporte nativo para pruebas automatizadas mediante su cliente de prueba, que permite simular peticiones HTTP sin necesitar un servidor real. La integración con pytest es el estándar del sector para proyectos Flask modernos.

El objeto test_client() permite verificar códigos de estado, contenido de respuestas JSON, comportamiento de autenticación y flujos completos de la aplicación. Los fixtures de pytest garantizan que cada test comience con un estado limpio y predecible.

El uso de mocks (via unittest.mock o pytest-mock) permite aislar dependencias externas como APIs de terceros, servicios de correo o almacenamiento en la nube, haciendo los tests rápidos y deterministas.

Características avanzadas

Flask ofrece características avanzadas que permiten construir aplicaciones sofisticadas. El sistema CLI basado en Click permite crear comandos personalizados para tareas de administración, gestión de la base de datos e importación de datos directamente desde la terminal.

Los hooks del ciclo de vida (before_request, after_request, teardown_request) permiten implementar comportamiento transversal como logging, autenticación y métricas sin contaminar la lógica de negocio. El middleware WSGI ofrece un nivel adicional de intercepción a nivel del protocolo WSGI.

Flask (versión estable) añade soporte mejorado para async/await en vistas y hooks, rotación segura de claves con SECRET_KEY_FALLBACKS, nuevas configuraciones de seguridad para formularios (MAX_FORM_MEMORY_SIZE, MAX_FORM_PARTS) y el comando simplificado flask run --debug.

Despliegue en producción

Para producción, Flask se ejecuta con Gunicorn como servidor WSGI, gestionando múltiples procesos worker para manejar peticiones concurrentes. Nginx actúa como proxy inverso, manejando TLS y sirviendo archivos estáticos de forma eficiente.

Docker es la forma estándar de contenerizar aplicaciones Flask, garantizando reproducibilidad entre entornos. Con Docker Compose se orquesta fácilmente Flask junto con PostgreSQL, Redis y otros servicios.

Ecosistema y extensiones

El ecosistema de Flask es rico y maduro, con cientos de extensiones disponibles que cubren prácticamente cualquier necesidad de desarrollo web. Algunas de las extensiones más populares incluyen:

  • Flask-Mail para envío de correos electrónicos
  • Flask-Admin para interfaces de administración
  • Flask-Caching para sistemas de caché
  • Flask-Smorest y Flask-RESTX para construir APIs REST con documentación OpenAPI generada automáticamente
  • Flask-SocketIO para WebSockets y comunicación en tiempo real
  • Flask-Migrate para migraciones de base de datos apoyadas en Alembic
  • pytest-flask para facilitar las pruebas unitarias

La filosofía de microframework de Flask significa que puedes empezar con una aplicación simple de pocas líneas y escalarla gradualmente añadiendo únicamente las funcionalidades que necesitas. Esta aproximación incremental es ideal para el aprendizaje y permite entender cada componente de la aplicación web.

Flask es especialmente adecuado para prototipado rápido, desarrollo de APIs, microservicios, y aplicaciones web de tamaño pequeño a mediano. Su curva de aprendizaje suave y su documentación excelente lo convierten en una opción ideal tanto para principiantes como para desarrolladores experimentados que valoran la simplicidad y el control sobre la complejidad.

Lecciones y tutoriales de Flask

Módulos del curso

Explora todos los módulos disponibles en este curso de Flask

Explorar más tecnologías

Descubre más tecnologías de programación y desarrollo de software

Alan Sastre - Autor del curso

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Flask es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.