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, 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.
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
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
Aunque Flask no incluye un ORM por defecto, se integra perfectamente con SQLAlchemy, el ORM más popular de Python. Esta combinación permite trabajar con bases de datos relacionales de manera eficiente y pythónica.
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).
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-Cache para sistemas de caché
- Flask-Testing 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.
Completa este curso de Flask y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs