Extensiones en Flask: Guía práctica

Publicado por Andrea Navarro en

En este artículo exploraremos una selección de extensiones populares de Flask explicando brevemente para qué sirve cada una y en qué casos resulta útil. Veremos como gracias a estas extensiones Flask puede adaptarse a distintos tipos de proyectos.

Flask es un microframework para Python que se caracteriza por su simplicidad, flexibilidad y ligereza. A diferencia de otros frameworks, Flask no impone una estructura ni obliga a usar componentes predeterminados sino que ofrece una base mínima que es posible ampliar mediante el uso de extensiones.

A continuación se listan algunas extensiones populares de Flask utilizadas para crear funcionalidades específicas para tipos muy diferentes de proyectos.

Extensiones Flask para Bases de Datos

Flask-SQLAlchemy

Flask-SQLAlchemy es una de las extensiones más utilizadas con Flask. Facilita la integración de SQLAlchemy, un ORM, que permite interactuar con bases de datos relacionales como SQLite, PostgreSQL o MySQL a través de clases y objetos en lugar de consultas SQL directas. Esto permite independizar el código de el tipo de base de datos pudiendo realizar operaciones y consultas mediante la manipulación de objetos que luego serán traducidas al lenguaje de la base de datos seleccionada y convertir los resultados en objetos, diccionarios o listas.

En este artículo introductorio se explica qué es un ORM, cómo funciona Flask-SQLAlchemy y cómo establecer la conexión con distintas bases de datos. La creación de modelos, los tipos de datos disponibles, la definición de relaciones y la generación de bases de datos a partir de estos modelos se desarrolla en este segundo artículo. Por último, este recurso adicional aborda las operaciones más comunes: inserción, actualización, eliminación y consultas sobre los datos.

Flask-Migrate

Flask-Migrate es una extensión que integra Alembicm, una herramienta de migración para SQLAlchemy, con Flask. Permite realizar cambios incrementales en la estructura de la base de datos a medida que evoluciona el modelo de datos, sin perder información ya almacenada.

En lugar de modificar las tablas manualmente o eliminar y recrear la base de datos, Flask-Migrate genera scripts de migración que reflejan los cambios realizados en los modelos definidos con Flask-SQLAlchemy. Esto facilita mantener sincronizados el código y la base de datos durante el desarrollo y el despliegue. Esta extensión es especialmente útil en proyectos cuya estructura de base de datos se encuentra en evolución constante.

Flask-MongoEngine

Flask-MongoEngine es una extensión que permite integrar el ODM MongoEngine con aplicaciones desarrolladas en Flask. A diferencia de Flask-SQLAlchemy, que trabaja con bases de datos relacionales, esta herramienta está diseñada para proyectos que utilizan MongoDB, una base de datos NoSQL orientada a documentos.

MongoEngine permite interactuar con colecciones de documentos mediante clases y objetos en Python. Flask-MongoEngine incluye utilidades para conectar la aplicación con MongoDB, definir documentos como modelos de Python, y realizar operaciones como inserción, consultas, actualizaciones y eliminaciones.

Extensiones Flask para Formularios e Interfaz

Flask-WTF

Flask-WTF es una extensión que facilita la integración de WTForms con Flask, permitiendo trabajar con formularios HTML de manera estructurada, segura y validada. Esta herramienta proporciona una interfaz que permite definir formularios como clases en Python, incorporar validaciones automáticas y personalizadas, y gestionar la renderización en las plantillas de forma sencilla.

En este artículo introductorio se abordan los aspectos fundamentales del uso de Flask-WTF, incluyendo la creación de formularios, la definición de campos y validaciones, el uso de validaciones personalizadas, y la interacción con las plantillas para mostrar formularios, cargar valores iniciales y extraer datos enviados por el usuario. Para casos que requieren trabajar con archivos, este segundo artículo muestra cómo utilizar formularios para subir archivos, establecer restricciones de tipo y tamaño, y guardar los archivos en el servidor.

WTForms-Alchemy

WTForms-Alchemy es una extensión que complementa a WTForms y facilita la integración con SQLAlchemy. Su principal funcionalidad es la generación automática de formularios a partir de modelos definidos con Flask-SQLAlchemy. Esto permite reducir la cantidad de código necesario para construir formularios complejos y mantener sincronizados los formularios con la base de datos. Es útil en proyectos grandes o con estructuras de datos extensas, donde definir cada formulario manualmente puede volverse repetitivo y propenso a errores.

Flask-CKEditor

Flask-CKEditor es una extensión que integra el editor de texto enriquecido CKEditor dentro de aplicaciones Flask. Permite reemplazar campos de texto plano por un editor WYSIWYG, que brinda a los usuarios la posibilidad de aplicar formato al contenido de forma visual e intuitiva.

Esta extensión es especialmente útil en aplicaciones que requieren la entrada de contenido estructurado o con formato, como blogs, foros y sistemas de comentarios. Ofrece soporte para carga de archivos y permite personalizar herramientas, temas y configuraciones del editor para adaptarse a diferentes necesidades.

Flask-Dropzone

Flask-Dropzone es una extensión que integra el plugin de JavaScript Dropzone.js en aplicaciones Flask, permitiendo implementar una interfaz para la carga de archivos al arrastrar y soltar archivos (drag & drop), como así también vista previa de imágenes y barra de progreso durante la carga.

Es posible combinarlo con Flask-WTF y permite controlar parámetros como el número máximo de archivos, tamaño permitido, tipo de archivo aceptado y comportamiento tras la carga.

Flask-Images

Flask-Images es una extensión cuya funcionalidad principal es permitir el procesamiento de imágenes, como redimensionar, recortar, escalar y convertir formatos, directamente desde URLs, sin necesidad de almacenar múltiples versiones en el servidor. Esto es útil en sitios donde se muestran imágenes en distintos tamaños según el contexto como miniaturas, vistas previas y perfiles.

Flask-Images utiliza la librería de procesamiento de imágenes Pillow permite la integración en las plantillas Jinja mediante funciones que generan URLs procesadas automáticamente.

Flask-Table

Flask-Table es una extensión que facilita la generación de tablas HTML en aplicaciones Flask utilizando clases Python. Permite definir cómo se debe representar cada fila y columna, lo que ayuda a separar la lógica de presentación del resto de la aplicación. También permite personalizar columnas, aplicar formato a los datos, agregar enlaces o botones en celdas, y manejar atributos HTML como clases y estilos. Es útil en proyectos donde se requiere generar tablas desde el backend sin escribir HTML manualmente

Extensiones Flask para APIs RESTful

Flask-RESTful

Flask-RESTful es una extensión que simplifica el desarrollo de APIs REST con Flask. Permite definir recursos, manejar peticiones HTTP y manejar datos de entrada y salida. Las clases de recursos permite integrar validadores y utilizar serialización personalizada como así también manejo de errores, código de estado y generar respuestas.

Es útil para proyectos que requieren una separación entre frontend y backend, como aplicaciones móviles, sistemas SPA o microservicios.

Flask-Marshmallow

Flask-Marshmallow es una extensión que integra Marshmallow, una librería de serialización y validación de datos, con Flask. Permite convertir objetos a otros formatos como JSON y viceversa, validando y transformando automáticamente los datos de entrada y salida.

Se utiliza comúnmente en APIs, para estructurar respuestas, validar los datos enviados por el cliente y aplicar formato a los resultados. Soporta relaciones entre objetos, campos anidados, formatos personalizados y reglas de validación complejas.

Flask-Smorest

Flask-Smorest es una extensión para construir APIs RESTful en Flask de forma estructurada, robusta y con documentación automática. Está basada en Flask-RESTful, pero ofrece una integración más completa con OpenAPI , así como validación automática de datos y serialización usando Marshmallow.

Permite la definición de rutas y métodos HTTP, el manejo de esquemas de entrada y salida con validación estricta, la generación de documentación interactiva y el soporte nativo para Blueprints. Es útil para proyectos que requieren una API validada y documentada.

Flask-CORS

Flask-CORS es una extensión que permite habilitar CORS (Cross-Origin Resource Sharing) en aplicaciones Flask de manera sencilla. Permite especificar los orígenes, métodos HTTP y cabeceras son permitidas. Es posible aplicar de manera global o aplicar a rutas específicas.

Extensiones Flask para autenticación y seguridad

Flask-Login

Flask-Login es una extensión que gestiona la autenticación de usuarios en aplicaciones Flask. Proporciona funcionalidades que permiten implementar sistemas de inicio de sesión, mantener sesiones activas y proteger rutas que requieren autenticación. Su instalación y uso básico se explica en este artículo.

Permite el manejo de sesiones mediante cookies, la carga automática del usuario autenticado en solicitudes, y la creación de decoradores que permiten restringir el acceso a ciertas rutas. No incluye formularios ni base de datos, lo que permite integrarla con Flask-WTF y con Flask-SQLAlchemy u otro sistema de persistencia para almacenar usuarios.

Flask-Session

Flask-Session es una extensión que permite almacenar datos de sesión en servidores externos o sistemas persistentes, en lugar de usar las cookies del navegador por defectos. Ofrece varios backends de almacenamiento, como Redis, Memcached, bases de datos relacionales, sistemas de archivos o almacenamiento en caché. Es útil en aplicaciones más complejas o en entornos distribuidos, donde la persistencia y escalabilidad del manejo de sesiones es un requerimiento.

Flask-JWT-Extended

Flask-JWT-Extended es una extensión que permite implementar autenticación basada en JSON Web Tokens (JWT) en aplicaciones Flask. Facilita la creación, verificación y gestión de tokens de acceso y refresh tokens, así como el control de rutas protegidas mediante decoradores. También permite agregar datos personalizados al token (como roles o permisos), configurar su expiración y manejar escenarios como revocación o renovación de tokens.Flask-JWT-Extended puede integrarse con extensiones como Flask-SQLAlchemy o Flask-Smorest. En este artículo se hace una introducción a esta extensión.

Flask-Bcrypt

Flask-Bcrypt es una extensión que facilita el uso de bcrypt para el manejo de contraseñas en aplicaciones Flask. Sirve para encriptar y verificar contraseñas de usuarios, mejorando la seguridad frente a ataques como fuerza bruta o acceso a bases de datos comprometidas.

Permite generar hashes seguros a partir de contraseñas en texto plano y luego verificar si un valor ingresado coincide con el hash almacenado. También se puede ajustar el factor de complejidad (cost) para equilibrar seguridad y rendimiento. Es útil en sistemas de autenticación construidos con Flask-Login o Flask-JWT-Extended, donde el almacenamiento seguro de credenciales es fundamental.

Flask-Argon2

Flask-Argon2 es una extensión que integra el algoritmo de hashing Argon2 en aplicaciones Flask para el manejo seguro de contraseñas. Al igual que Flask-Bcrypt, esta extensión permite generar hashes seguros y verificar contraseña. Permite ajustar parámetros como el tiempo de cómputo, el uso de memoria y el número de hilos, brindando control sobre el equilibrio entre seguridad y rendimiento.

Flask-Argon2 es una útil para aplicaciones que requieren máxima seguridad en el almacenamiento de contraseñas, y puede integrarse con sistemas de autenticación como Flask-Login o Flask-JWT-Extended.

Flask-Security-Too

Flask-Security-Too es una extensión todo en uno que proporciona una solución completa de autenticación y autorización para aplicaciones Flask. Es un fork de la extensión original Flask-Security. Combina varias herramientas como Flask-Login, Flask-Principal, Flask-WTF, Flask-Mail y un sistema de hashing como Flask-Bcrypt o Flask-Argon2.

Ofrece funcionalidades integradas como el registro y login de usuarios, recuperación y cambio de contraseña, confirmación por email, autenticación multifactor, roles y permisos, protección contra ataques CSRF y compatibilidad con JWT y sesiones tradicionales.

Es útil para proyectos que necesitan un sistema de seguridad robusto y extensible desde el inicio, manteniendo flexibilidad para personalizar formularios, vistas y comportamientos según los requisitos de la aplicación.

Extensiones Flask de comunicación

Flask-Mail

Flask-Mail es una extensión que permite integrar el envío de correos electrónicos en aplicaciones Flask. Proporciona una interfaz simple para conectarse a servidores SMTP y enviar mensajes desde el backend, lo que la hace útil para funcionalidades como verificación de cuenta, recuperación de contraseñas, notificaciones automáticas o mensajes de contacto.

Permite configurar datos como el servidor de correo, puerto, uso de TLS/SSL, credenciales de autenticación y dirección del remitente. Los mensajes se construyen mediante objetos que pueden incluir texto plano, HTML y archivos adjuntos.

Flask-SocketIO

Flask-SocketIO es una extensión que agrega soporte para WebSockets y comunicación en tiempo real a aplicaciones Flask. Permite implementar funcionalidades como chats en vivo, notificaciones instantáneas, transmisión de datos en tiempo real, y otras formas de interacción bidireccional entre el cliente y el servidor.

Internamente, se basa en la biblioteca python-socketio y es compatible con distintos backends (como eventlet, gevent o threading), lo que permite escalar aplicaciones en entornos de producción. Es útil para proyectos que requieren actualizar la interfaz del usuario sin necesidad de recargar la página.

Extensiones Flask de rendimiento y administración

Flask-Admin

Flask-Admin es una extensión que permite agregar una interfaz administrativa a aplicaciones Flask. Ofrece un panel web totalmente funcional para gestionar modelos de datos, usuarios, contenidos y configuraciones sin necesidad de crear vistas personalizadas desde cero.

Puede integrarse con Flask-SQLAlchemy, MongoEngine, y otros ORMs, generando automáticamente formularios de edición, listas, filtros y validaciones. También permite personalizar la apariencia, los permisos de acceso y el comportamiento de cada sección del panel. Es útil en aplicaciones que requieren una interfaz interna para la gestión de datos.

Flask-Caching

Flask-Caching es una extensión que proporciona una capa de caché para aplicaciones Flask, ayudando a mejorar el rendimiento al almacenar resultados costosos en memoria y evitar cálculos o consultas repetitivas. Soporta múltiples backends de almacenamiento como Redis, Memcached, filesystem, o simplemente memoria local, y permite aplicar caché a rutas completas, fragmentos de vista, funciones específicas o resultados de consultas.

Permite definir tiempos de expiración personalizados, invalidar cachés manualmente o condicionar su uso según variables del entorno. Es útil en aplicaciones con alto tráfico o que muestran datos que no cambian con frecuencia.

Flask-Limiter

Flask-Limiter es una extensión que permite implementar rate limiting (limitación de velocidad de peticiones) en aplicaciones Flask. Su objetivo es proteger el servidor contra ataques de denegación de servicio (DoS), bots o uso excesivo de recursos por parte de ciertos usuarios.

La extensión permite definir reglas de limitación basadas en IP, cabeceras personalizadas, tokens de usuario u otros identificadores. Se puede aplicar a toda la aplicación, a rutas específicas o a funciones individuales. Es útil en APIs públicas, paneles administrativos, formularios sensibles o cualquier endpoint donde se necesite prevenir el uso abusivo.


Hemos llegado al final!

Espero que les sea de utilidad! En la medida en que escriba artículos específicos sobre las extensiones mencionadas, iré enlazando en este post, y compartiendo.


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora