¿Qué es Flask Python? Un breve tutorial sobre este microframework
Flask es un framework web especialmente ligero, pensado tanto para quienes dan sus primeros pasos con Python como para desarrolladores con experiencia. Su filosofía se basa en centrarse en lo esencial y dejar el resto en manos de extensiones y bibliotecas externas que puedes incorporar según las necesidades de tu proyecto.
Python y sus frameworks web
Python es uno de los lenguajes de programación usados en Internet más populares del mundo. Su éxito se debe, en gran parte, a una filosofía que apuesta por un código claro, conciso y fácil de mantener. Esto reduce las fuentes de errores, agiliza el aprendizaje, especialmente con la ayuda de un tutorial de Python, y hace que el desarrollo sea más eficiente.
Creado en 1991 por Guido van Rossum, Python continúa evolucionando gracias a una gran comunidad internacional, coordinada por la organización sin ánimo de lucro Python Software Foundation. El lenguaje es de código abierto, multiplataforma y admite distintos paradigmas de programación, como el enfoque orientado a objetos o el funcional. También admite funcionalidades como el logging y puede ejecutarse como un script CGI.
Para crear páginas web dinámicas y aplicaciones online, Python cuenta con varios frameworks web que automatizan tareas repetitivas y proporcionan estructuras ya preparadas. Gracias a ello, se evitan errores comunes y problemas típicos de Python, y los proyectos resultan más seguros y rápidos. Muchas funciones habituales pueden integrarse directamente sin necesidad de desarrollarlas desde cero.
Uno de los frameworks web más populares del ecosistema Python es django CMS. Como solución full stack, ofrece un conjunto muy amplio de herramientas y funcionalidades listas para usar. Esto lo hace potente y completo, pero también más rígido y estructurado. Como contrapunto, Flask se presenta como una alternativa minimalista y flexible, ideal si prefieres construir tu aplicación pieza a pieza y mantener un control total sobre su arquitectura.
¿Qué es Flask?
Mientras que los frameworks full stack como Django ofrecen a los desarrolladores numerosas bibliotecas propias, Flask sigue un enfoque diferente. El framework web, presentado por el desarrollador austríaco Armin Ronacher en 2010, es deliberadamente minimalista y evita cualquier funcionalidad que no sea esencial. Solo incluye el motor de plantillas Jinja y la biblioteca “Werkzeug”. Flask omite por completo todas las funciones que ya están cubiertas por otras bibliotecas, pero permite integrarlas fácilmente cuando se necesitan. Está bajo la licencia BSD, es gratuito y de código abierto. Como alternativa a Django y otros frameworks más completos, Flask logró atraer a una amplia comunidad en muy poco tiempo.
- Creador de páginas web rápido e intuitivo
- Imágenes y textos impactantes, generados en un instante
- Dominio, SSL y buzón de correo electrónico incluidos
Configurar Flask en Python y crear una aplicación web
Antes de poder configurar Flask para Python, debes cumplir algunos requisitos previos. Es necesario tener Python 3 instalado, así como un editor de texto o un entorno de desarrollo integrado (IDE) y acceso a Internet. También resulta útil contar con conocimientos básicos de Python, programación, tipos de datos y bucles for. Flask es un buen punto de partida para aprender a crear aplicaciones web. Configura el framework de la siguiente manera:
- Crea un entorno virtual para separar el nuevo proyecto de tus otras bibliotecas o proyectos de Python. De lo contrario, podrían producirse conflictos en tu sistema. El comando correspondiente es:
$ python -m venv nuevoproyecto- Ahora instala Flask. Para ello, lo más recomendable es utilizar el gestor de paquetes pip. El comando adecuado es:
$ pip install flask- Para comprobar si la instalación se ha realizado correctamente, utiliza este comando:
python -c "import flask; print(flask.__version__)"- A continuación, puedes probar Flask y crear una aplicación base sencilla. Para ello, abre un archivo en tu directorio. En este ejemplo lo llamamos
inicio.pyy lo abrimos con nano:
$ nano inicio.py- Escribe el siguiente código en ese archivo:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def test():
return "Hola, Flask"-
Guarda y cierra el archivo.
-
Con la variable de entorno FLASK_APP indicas a Flask dónde se encuentra el archivo correspondiente:
$ export FLASK_APP=inicio- Con FLASK_ENV ejecutas el archivo en modo de desarrollo:
$ export FLASK_ENV=development- Ahora ejecuta la aplicación:
$ flask runEl resultado será algo similar a lo siguiente:
Output
- Sirviendo la app de Flask "inicio" (carga diferida)
- Entorno: desarrollo
- Modo debug: activado
- Ejecutándose en [Dirección IP]/ (Pulsa CTRL+C para salir)
- Reiniciando con stat
- ¡El depurador está activo!
- PIN del depurador [PIN]Ventajas y desventajas de Flask
Existen buenas razones para utilizar Flask. Sin embargo, según el tipo de proyecto, algunos aspectos pueden resultar menos favorables. Por eso, merece la pena revisar con atención las ventajas y desventajas de este framework web.
Ventajas
✓ Alcance: es difícil encontrar un framework más ligero que Flask. Se instala en muy poco tiempo y puede utilizarse casi de inmediato. ✓ Flexibilidad: la flexibilidad es otro de sus puntos fuertes. Puedes resolver cada problema de forma individual e integrar únicamente las bibliotecas que realmente necesitas. Así es posible adaptar cada proyecto a tus requisitos. ✓ Curva de aprendizaje: con un tutorial de Flask, los progresos llegan rápido. El framework está pensado para ser sencillo, pero permite trabajar también en proyectos más avanzados. Por ello, es una buena opción tanto para principiantes como para profesionales. ✓ Código abierto: Flask es gratuito y de código abierto, por lo que puedes probarlo sin coste y comprobar si se adapta a tus necesidades. ✓ Comunidad: Flask cuenta con una comunidad muy amplia que ofrece ayuda y consejos tanto a personas que empiezan como a desarrolladores experimentados. Las dudas y problemas suelen resolverse rápidamente.
Desventajas
✗ Alcance: según el uso previsto, su carácter minimalista también puede ser una desventaja. Muchas funciones deben integrarse aparte, mientras que otros frameworks ya las incluyen de serie. ✗ Dependencia de terceros: el uso de bibliotecas externas constituye siempre una posible fuente de errores, y en Flask son imprescindibles. ✗ Responsabilidad: mientras que otros frameworks gestionan parte del mantenimiento de forma automática, en Flask esa responsabilidad recae sobre los usuarios. Esto aporta mayor control, pero también implica más trabajo.
Ejemplo Hello-World: rutas, plantillas y API
Para conocer mejor el funcionamiento básico de Flask, a continuación se presenta un pequeño ejemplo que ilustra los conceptos fundamentales del framework. Crearemos una aplicación web sencilla que muestra cómo funcionan juntos el enrutamiento, las plantillas y una API REST. El ejemplo consta de dos archivos:
app.py: aquí se encuentra nuestro código en Python.templates/hello.html: este archivo es una plantilla Jinja2 para mostrar la página web de forma dinámica.
El archivo app.py se ve de la siguiente manera:
from flask import Flask, jsonify, render_template, request
app = Flask(__name__)
@app.route("/")
def home():
return "Hello World!"
@app.route("/greet/<name>")
def greet(name):
return render_template("hello.html", name=name)
@app.route("/api/square", methods=["GET"])
def square():
number = request.args.get("number", default=0, type=int)
result = number ** 2
return jsonify({"number": number, "square": result})
if __name__ == "__main__":
app.run(debug=True)pythonEste es el archivo hello.html, que funciona como plantilla:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Saludo</title>
</head>
<body>
<h1>¡Hola, {{ name }}!</h1>
<p>Bienvenido a Flask con la plantilla Jinja2.</p>
</body>
</html>htmlCon @app.route definimos diferentes puntos finales, es decir, URL que el servidor puede responder. La página de inicio (“/”) muestra simplemente el texto “Hello World!”. A través de una ruta dinámica (“/greet/<name>”), podemos mostrar un saludo personal. El nombre se toma de la URL y se pasa a nuestra plantilla Jinja2, que lo inserta en HTML (ver el código de templates/hello.html).
Además, demostramos cómo crear una pequeña API REST: En el punto final “/api/square”, puedes pasar un número como parámetro de la URL y la aplicación devolverá el cuadrado del número como respuesta JSON. Vemos así que Flask puede servir tanto a páginas web clásicas como a puntos finales de API. También es posible integrar contenidos dinámicos en HTML mediante plantillas, sin necesidad de modificar la página manualmente.
Por supuesto, este código es solo un ejemplo mínimo en el contexto de un tutorial de Flask. Su objetivo principal es explicar los conceptos básicos. En una aplicación real, además se deberían considerar aspectos como el manejo de errores, la seguridad, la validación de datos y una estructura de proyecto limpia para que la app sea estable, fiable y mantenible.
Extensiones de Flask
Dado que Flask es muy minimalista, muchas funciones útiles, como la conexión a bases de datos, la autenticación o la validación de formularios, no están integradas. Para añadir estas capacidades se utilizan extensiones de Flask, desarrolladas y mantenidas por la comunidad. Pueden integrarse fácilmente en una aplicación y amplían considerablemente la funcionalidad sin modificar el framework. De este modo, los desarrolladores pueden elegir solo los componentes que realmente necesitan y construir su aplicación de forma modular. Las extensiones suelen seguir la misma estructura que Flask y cuentan con una buena documentación.
Ejemplos de extensiones importantes de Flask son:
- Flask-SQLAlchemy: una extensión para conectar con bases de datos. Integra el popular ORM SQLAlchemy en Flask y permite trabajar con bases de datos a través de clases de Python.
- Flask-WTF: esta extensión facilita la creación y validación de formularios web. Incluye funciones de seguridad como protección CSRF y simplifica el manejo de datos de usuario.
- Flask-Login: como indica su nombre, Flask-Login simplifica la gestión de usuarios y la autenticación. Se encarga del estado de inicio de sesión, las sesiones y la protección de acceso para rutas específicas.
- Flask-Migrate: con Flask-Migrate puedes gestionar migraciones de bases de datos que aplican automáticamente los cambios en su estructura. Su uso es ideal junto con Flask-SQLAlchemy para actualizaciones organizadas.
- Flask-RESTful: esta extensión facilita la creación de API REST. Proporciona recursos, rutas y métodos HTTP como GET, POST, PUT o DELETE de forma estandarizada.
Estructura del proyecto y mejores prácticas
En proyectos con Flask, es recomendable definir desde el principio una organización clara y estructurada. Aunque técnicamente las aplicaciones pequeñas pueden funcionar en un solo archivo, una estructura ordenada facilita mucho el mantenimiento y la ampliación de la aplicación.
En proyectos más grandes, suele crearse un directorio templates para los archivos HTML, otro static para CSS, JavaScript e imágenes, así como carpetas como app o src para los módulos de Python. Dentro de la carpeta principal pueden añadirse subcarpetas para Blueprints, modelos, formularios o utilidades, con el objetivo de separar las funciones de manera lógica. Los Blueprints permiten organizar los distintos componentes de la aplicación de forma modular, por ejemplo, un sistema de usuarios o un blog.
Las mejores prácticas también recomiendan proteger valores de configuración, como URL de bases de datos o claves secretas, en un archivo config.py separado o mediante variables de entorno. El registro continuo ayuda a detectar errores con antelación y a comprender mejor el comportamiento de la aplicación. Además, es aconsejable utilizar entornos virtuales para gestionar las dependencias de forma ordenada. El control de versiones con Git también es una práctica estándar.
- Plantillas profesionales
- Modificación del diseño con un solo clic
- Dominio, SSL y correo electrónico
Flask: seguridad y pruebas
La seguridad y las pruebas no son extras opcionales, sino partes fundamentales de una aplicación profesional en Flask. Por ello, no deberían faltar en ningún tutorial de Flask. Si desde el principio prestas atención al cifrado, la validación de entradas, las configuraciones seguras y las pruebas automatizadas, podrás desarrollar aplicaciones web estables y seguras que se amplíen sin problemas en el futuro.
Seguridad en Flask
Debido a la estructura minimalista de Flask, la responsabilidad de la seguridad recae en los desarrolladores. Una protección básica incluye el uso de protección CSRF en los formularios, especialmente cuando hay entradas de usuario. Para ello, la extensión Flask-WTF proporciona mecanismos fiables.
Las contraseñas nunca deben almacenarse en texto claro, sino siempre cifradas o con hash. Para este fin, resultan adecuadas bibliotecas como werkzeug.security o bcrypt. También es esencial la validación de entradas para prevenir inyecciones SQL, ataques XSS u otros tipos de manipulación.
En las sesiones y cookies deben configurarse las flags HttpOnly y Secure para proteger los datos sensibles. Además, configuraciones como URL de bases de datos o claves API deben gestionarse mediante variables de entorno o archivos de configuración separados, y no directamente en el código.
Pruebas en Flask
Como en cualquier aplicación, las pruebas en Flask son esenciales para garantizar la estabilidad de la aplicación. Con las llamadas pruebas unitarias se verifican funciones individuales de forma aislada, mientras que las pruebas de integración evalúan la interacción entre varios componentes.
Flask ofrece un cliente de pruebas integrado, que permite simular solicitudes HTTP sin necesidad de iniciar realmente el servidor. Esto facilita comprobar de forma automatizada rutas, plantillas y puntos finales de API. Es especialmente importante escribir casos de prueba de manera regular, sobre todo cuando se añaden nuevas funciones, para evitar regresiones. Combinado con Continuous Integration, este enfoque garantiza que la aplicación siga siendo fiable incluso cuando se producen cambios.

