Bienvenidos a este tutorial flask desde cero donde aprenderemos a instalar y comenzar a utilizar el framework Flask que se ha hecho muy popular últimamente para el desarrollo de aplicaciones web con Python!. Antes que nada quiero aclarar que nos vamos a enfocar en respetar una Arquitectura MVC de la cual hablamos en la anterior entrada y de la cual considero tienes, al menos, una vaga noción. Me he currado mucho esta guía de flask tratando de explicar todo detalladamente, paso a paso y cubriendo la mayoría de posibles errores y requisitos.
🆚 ¿Flask o Django? – Para los curiosos:
Cuando estamos aprendiendo a programar, es muy conveniente comenzar a trabajar con Flask porque es un micro-framework ligero y flexible que nos permite entender mejor cómo funcionan las bases del desarrollo web sin la necesidad de lidiar con estructuras complejas desde el inicio. Al usar Flask, aprendemos a construir rutas, manejar peticiones y respuestas, conectar bases de datos y extender funcionalidades de manera gradual, lo que fortalece nuestros conocimientos fundamentales antes de pasar a frameworks más grandes y estructurados como Django. Además, su simplicidad nos motiva a crear proyectos reales de forma rápida, ideal para principiantes que buscan resultados inmediatos y claros.
👉 Comparativa Flask vs Django
Característica | 🌶️ Flask | 🟩 Django |
---|---|---|
Tipo de framework | Microframework (minimalista) | Framework completo (baterías incluidas) |
Estructura inicial | Muy ligera, sin estructura fija | Estructura predeterminada estricta |
Curva de aprendizaje | Más sencilla al principio | Más pronunciada inicialmente |
Extensiones | Necesita instalar extensiones para muchas funcionalidades | Incluye ORM, autenticación, administración, etc. |
Flexibilidad | Muy alta, tú defines todo | Menos flexible, más organizado |
Proyectos ideales | Aplicaciones pequeñas a medianas o APIs | Aplicaciones grandes y complejas |
Velocidad de desarrollo | Rápida al principio, más decisiones manuales | Rápida para proyectos grandes con soluciones integradas |
Comunidades y documentación | Muy buena comunidad, abundante documentación | Comunidad aún más grande, excelente documentación oficial |
Popularidad | Popular para microservicios y APIs | Muy popular para sitios completos y proyectos robustos |
🌶️ ¿Qué es Flask?
Flask es un Framework o entorno de trabajo dedicado a facilitar la creación de aplicaciones web utilizando el lenguaje de programación Python.
- ¿Un qué?
Un Framework es un marco o esquema de trabajo que consiste en un conjunto de herramientas y módulos para facilitarnos el desarrollo de software.En este caso Flask al igual que el famoso Django es un framework que nos facilita la creación de aplicaciones web dinámicas utilizando el lenguaje de programación Python.
🧩 Flask y la arquitectura MVC
Flask es un framework que implementa la arquitectura MVC que aprendimos en la anterior lección y lo hace de una manera muy particular que una vez comprendas la manera de trabajar realmente te resultará muy cómoda y quedarás sorprendido con la enorme cantidad de posibilidades de aplicaciones que puedes desarrollar utilizando este Framework.
Como este es un «tutorial flask desde cero» me veo obligado a explicar como instalar FLASK y luego en la siguiente entrada vamos a trabajar con él utilizando aquél proyecto que llamamos «proyecto01» donde creamos una serie de carpetas y archivos que dejamos vacíos.
📥 Instalar Flask en nuestro sistema operativo
Antes de explicar como instalar Flask en nuestro sistema operativo debo asegurarme de que entiendas lo siguiente:
¿Cómo se gestiona un proyecto de desarrollo profesional?
Cuando trabajamos con un proyecto profesional, es decir, cuando nos avocamos a crear una aplicación utilizando cualquier Framework como Flask o diversas librerías es una buena práctica utilizar un entorno virtual para evitar que con una actualización de estos Frameworks, librerías o incluso de nuestro sistema operativo nuestra aplicación o «proyecto de aplicación» deje de funcionar debido a diferencias de implementación, cambios en los requerimientos o incompatibilidad.
Además un entorno virtual nos asegura que podamos trabajar con distintas versiones, tanto del framework mismo como de librerías complementarias. Por ejemplo; puedo tener dos proyectos con diferentes versiones de Flask y diferentes versiones de NumPy en cada uno.
Por lo que en vez de instalar FLASK en nuestro sistema operativo, lo instalamos dentro del entorno virtual antes mencionado.
1️⃣ Crear una nueva carpeta de trabajo (proyecto)

Como bien habrás leído en la comparación arriba flask no viene con una estructura “default” o por defecto, debemos configurarla nosotros a nuestro gusto y de forma que nos simplifique el desarrollo. En este caso se suele estructurar la carpeta “template” para las vistas, es decir, para todo aquellos archivos HTML que representan la parte “visible” de nuestra aplicación. Además también se suele crear la carpeta “static” que tiene adentro aquellos archivos estáticos (que no cambian en ejecución) como por ejemplo el CSS / JS (Hoja de estilos y Script’s en Javascript) de nuestra aplicación.
Como esto es un tutorial de flask, vamos a crear estas carpetas. Primero creare “proyecto1” y dentro “static” y “templates“. Además también crearemos el controlador que lo llamaremos “run.py” en la carpeta raíz. Digamos que créalo vacío por ahora. Entonces nos queda algo así (yo uso linux, pero en windows es lo mismo).
2️⃣ Crear un entorno virtual con virtualenv
Bien ahora todo lo que sigue podemos hacerlo directamente desde el visual studio code, en realidad esto de crear las carpetas también puede hacerse desde nuestro editor. Abrimos VSCode y nos encontraremos algo así:
Vamos a “abrir carpeta” y buscamos la carpeta de nuestro proyecto.
Cada vez que abrimos una carpeta en VSCode todo nuestro entorno se posiciona para trabajar con ella exclusivamente y es por eso que debemos siempre abrir la carpeta raíz y no subcarpetas.
Se nos preguntará si confiamos en los autores de este proyecto, obviamente si porque estas carpetas y archivos los creamos nosotros. Aún así esta advertencia suele aparecer cada vez que abrimos un proyecto para evitar ejecutemos algún malware en el caso que sea algún proyecto que nos han compartido. Siempre que confíes en el autor, acepta.
Al costado derecho se mostrará la estructura de nuestro proyecto y en el marco izquierdo el código o los archivos que tenemos en edición. Por lo que si abrimos run.py veremos algo así. Si has echo todo bien ya esta sería una buena configuración para trabajar, aún nos faltaría abrir la terminal debajo para que nos sea más cómodo ver las salidas de nuestra aplicación. Abrimos una terminal haciendo clic dentro del menú superior en “Ver>Terminal“
Deberías entonces ver el “Terminal integrado” en el panel inferior. Ahora que tenemos nuestro VSCode configurado es momento de crear una terminal y comenzar a trabajar en ella para instalar virtualenv y crear un entorno virtual.
-
-
- Fíjate que tu terminal debe ser la de “Bash”, en el caso de Windows a veces nos crea por defecto una terminal de PowerShell y no nos interesa por ahora trabajar con ella. Así que si es tu caso haces clic en la flecha desplegable que se encuentra al lado del simbolo “+” en tu terminal y añades una Terminal de bash o CMD (Command prompt).
- Finalmente nos queda instalar “virtualenv” con pip si aún no lo tienes instalado en tu equipo para proceder a crear el entorno virtual.
- Si no lo tenemos instalado, lo hacemos con el siguiente comando:
pip install virtualenv #o python3 -m pip install virtualenv
- Ahora que estamos seguros que está instalado es momento de crear el entorno virtual y lo hacemos con el siguiente comando:
virtualenv venv #o python -m venv venv
-
Si todo ha ido bien deberías ver creada la carpeta “venv” que adentro tiene distintas carpetas y archivos. Esta carpeta pertenece a nuestro entorno virtual y dentro de ella se instalarán todas nuestras librerías. Ahora es momento de activarlo, ya que no si esta activado cada comando que ejecutemos o librería que pretendamos instalar se instalará en nuestro equipo y no en el entorno. Y nosotros queremos trabajar con el entorno.
3️⃣ Activar el entorno virtual (@venv)
Hay varias formas de activarlo y algunas incluso dependiendo tu sistema operativo. En Windows lo más sencillo es arrastrar el script “/venv/Scripts/activate.bat” a la terminal de tu VSCode (lo que nos marcará la ruta de archivo) y ejecutarlo con un simple Enter. En linux lo podemos hacer mediante un sencillo comando. Veamos:
#En windows:
venv\Scripts\activate
#En linux:
source venv/bin/activate
¡Si obtienes algún error y eres novato no olvides solicitar ayuda en nuestro canal de Discord o bien también puedes preguntarla a la IA o leer la documentación de Virtualenv!. No olvides que los buenos programadores en realidad son hábiles buscadores 😝
Si el entorno virtual está activado verás (venv) en la consola o terminal antes del prompt (si, esa parte de usuario@nombredelequipo se llama así). Revisa siempre que tu entorno esté activado, de lo contrario, las librerías se instalarán directamente en tu equipo y tendrás errores de importación del estilo “ModuleNotFoundError” o “ImportError“.
4️⃣ Actualizar PIP e instalar Flask en nuestro entorno venv
#Actualizar PIP: python3 pip install --upgrade pip #o python3 -m pip install --upgrade pip #Luego, instala Flask: python3 -m pip install flask #o pip install flask
Y se debería instalar Flask en tu entorno virtual. Si luego deseas desintalarlo simplemente utilizas el mismo comando pero reemplazas «install» por «uninstall».
En fin una vez instalado verás una advertencia como la siguiente.
Echo esto, estamos listos para trabajar y explicar el funcionamiento básico de este software haciendo uso del proyecto que creamos allá por los tiempos de los dinosaurios.. Y si no lo creaste, pues ya ponte a eso o tendré que regañarte!!
Podemos usar el comando “pip list” para saber si flask se encuentra instalado correctamente en nuestro entorno virtual, este comando también nos permitirá llevar un control de las librerías instaladas.
🌶️ Flask utiliza la arquitectura MVC – Creando el controlador
No tengo realmente ganas de volver a hablar de la arquitectura MVC, ya explicamos el funcionamiento de la misma y aclaramos que Flask trabaja siguiendo esta arquitectura.
Teníamos un proyecto llamado «proyecto01» donde todas las carpetas y archivos habían quedado vacíos y tenía la siguiente estructura que ves en la imagen.
Pero déjame explicarte algo primero:
Flask está configurado por defecto para utilizar las carpetas «templates» para archivos HTML de vistas y la carpeta «static» para archivos de estilo (CSS), imágenes (carpeta «imagenes«), entre otros como archivos Javascript.
Cada uno de estos elementos pertenecientes a las vistas debe encontrarse dentro de una sub-carpeta o hablando con propiedad dentro de un subdirectorio de «static«. Por lo que en el caso de utilizar archivos «.css«, «.js«, o imágenes debemos crear subcarpetas para alojarlos que serán «css«, «js» o como ya la hemos creado anteriormente «imagenes«. Así que venga, crea las carpetas dentro de “static” para que nos quede así:
Espero que comprendas que los sub-directorios que hemos creado dentro de «proyecto01» son los sub-directorios que utiliza Flask para obligarnos a desarrollar las aplicaciones siguiendo la arquitectura MVC.
Así que cada vez que crees un proyecto es probable que debas crear estas mismas carpetas entre otras para alojar templates, archivos de estilos, imágenes, etc. Por supuesto, esta arquitectura puede variar o tu puedes crear carpetas personalizadas e indicarle al controlador que es lo que debe buscar allí.
🚀 Importar clase flask y crear app en el controlador de nuestra aplicación
En el archivo «run.py» (Controlador). Si piensas por un momento, lo primero que tenemos que hacer es indicar que se trata de un archivo script de Python y luego importar el framework Flask para comenzar a trabajar con él.
Para trabajar con un framework o librería cualquiera el primer requisito es tenerla instalada y el segundo «importarla» en el archivo python donde la vamos a utilizar, ¿verdad?.
Así que modificamos el archivo «run.py« para importar Flask:
#1 - Importamos clase Flask de flask (librería) from flask import Flask #2 - Creamos una app instanciando la clase Flask (automáticamente el nombre de la app) app = Flask(__name__)
Como ves te he detallado en un comentario lo que hacemos en cada línea! Al momento de importar estamos importando desde la librería flask que acabamos de instalar «la clase Flask». Importar esta clase es estrictamente necesario para trabajar con Flask y nos permitirá crear objetos basados en esta clase, esos objetos serán aplicaciones.
A veces puedes tener error de importación o de interprete al intentar ejecutar tu aplicación como el siguiente:
“ModuleNotFoundError” o “ImportError“. Incluso si tienes activado el escritorio virtual e instalado flask (comprobamos con pip list) es posible que VSCode tenga seleccionado el interprete de python incorrecto, en vez del de nuestro escritorio virtual.
Para corregir esto bastará con presionar “Ctrl + Shift + p” y se abrirá un menú superior que nos brinda la posibilidad de elegir el interprete con el que vamos a trabajar, en este caso debemos seleccionar el del entorno virtual “venv:venv“. Revisa en la siguiente imagen:
Una vez seleccionada la tercer opción en este caso el error se corrige inmediatamente. Si no es así intenta reiniciar tu VSCode.
Y es lo que hacemos en la segunda línea, creamos un objeto que hereda de la clase Flask y que por ende nos permitirá usar los métodos de los que dispone la clase Flask para cada objeto.
Así simplemente ya hemos creado una aplicación, ahora siguiendo el tutorial de flask, es momento de definir las «rutas». Y lo haremos usando un método de la clase Flask, que es «routes».
Crear las rutas de nuestra aplicación en el controlador
Pero.. ¿Qué son las rutas?. Las rutas serán básicamente funciones que determinan que sucederá al cargar determinada «url» de nuestra aplicación. Una «url» es una determinada dirección en el navegador, y como sabes todas las páginas o sitios web tienen una url de inicio o «home» que es la url principal.
Así que vamos a crear la url principal de nuestro sitio web, o aplicación web.
Bastará con añadir debajo del import y nuestra instancia de Flask, el siguiente código (3):
#1 - Importamos clase Flask de flask (librería) from flask import Flask #2 - Creamos una app instanciando la clase Flask (automáticamente el nombre de la app) app = Flask(__name__) # 3 - Creamos una ruta de inicio con un return "Hola mundo" @app.route('/') def inicio(): return 'Hola mundo'
Bueno vamos a explicar este código porque ya imagino tu cara en este momento. Y presta atención porque es sumamente importante y es difícil encontrar esta explicación en español y de forma tan sencilla:
Aquí lo que hacemos en tercera parte de este bloque de código; es usar un decorador (ya los hemos visto en otras lecciones). Este decorador se conoce como «routes«. El decorador es un método de la instancia de «app» que hereda de la clase Flask.
Podemos decir que «app» es la instancia de Flask, por lo que al colocar «app.routes()» luego del arroba estamos indicando que se tratará de una ruta y dentro de los paréntesis estamos brindando una cadena que es la «url» como un argumento. En el momento que la url coincida con la que el cliente está solicitando, se ejecutará la función que se encuentre debajo.
IMPORTAR Y CREAR INSTANCIA:
- Primera Línea: Importamos la CLASE Flask de la LIBRERÍA flask.
- Instanciamos una aplicación llamada «app» asignándole la clase Flask. Si has visto Clases en Python sabrás que «app» ahora es un objeto de la clase flask. Por lo que si quisiéramos tener otra aplicación dentro de esta misma bastaría con realizar una nueva instancia de la misma u otra Clase de otra librería.
Segundo bloque CREAR RUTAS:
- En la primera linea creamos el decorador correspondiente a las rutas para indicar que se trata de una «RUTA» de el objeto «app» que hereda de FLASK. Lo hacemos añadiendo «@app.route()» y brindando como argumento la url de inicio que corresponde a un SLASH («/»), para indicar que se trata de la página de inicio. Y por cierto, debemos pasarla siempre como String es decir entre comillas.
- Segunda linea.. Dentro de la ruta (decorador) creamos la función que va a decorar esta ruta (‘/’) y debe tener obligatoriamente un return!
- Tercera línea dentro de la función creamos el return, es decir lo que retornará la función al ser ejecutada (en este caso un “Hola mundo”). Y será ejecutada cuando el cliente cargue la url (‘/’)
Espero haber sido claro, después de esto solo me queda señalar dos cosas importantes:
- Para cada nueva URL deberemos crear una nueva función, por lo tanto deberemos decorar cada función para cada URL. Así que tendremos varios decoradores del tipo @app.route(‘url’) con diferentes funciones dentro para cada «url» o sección de nuestro sitio web o aplicación web.
✅ Iniciar nuestra primer aplicación flask
Ahora si podemos probar nuestra aplicación (si así puede llamarse porque aún no hace nada).. Para probar nuestra aplicación disponemos de un servidor que nos provee Flask apto para pruebas, pero antes debemos indicarle en el archivo o en la configuración de Flask cual es la aplicación que debe iniciar, en que MODO y en que dirección..
Yo prefiero indicarlo en el archivo de mi aplicación añadiendo lo siguiente al final de nuestro run.py:
#1 - Importamos clase Flask de flask (librería) from flask import Flask #2 - Creamos una app instanciando la clase Flask (automáticamente el nombre de la app) app = Flask(__name__) # 3 - Creamos una ruta de inicio con un return "Hola mundo" @app.route('/') def inicio(): return 'Hola mundo' # 4 - Ejecutamos la app si este archivo es el principal if __name__ == '__main__': app.run(debug=True)
- ¿Recuerdas que cuando creamos el objeto «app» instancia de la clase Flask colocamos como argumento «__name__«?. Pues este condicional lo que hace es comprobar si el nombre es igual al archivo que ejecutamos (‘__main__‘). Siempre que veas main se tratará del archivo en sí. Por ende, al ejecutar nuestro archivo, este condicional se cumple!
- Y dentro de el especifica, si se está invocando este archivo entonces ejecuta el método «run» de la app, lo que hará que se inicie. Pero también especifica como argumento que se active el modo «Debug» que nos permitirá identificar y corregir errores en la programación de nuestra app. Así que mientras la iniciamos y hacemos uso de nuestra app veremos en consola los errores que vayan surgiendo y las solicitudes que se realizan. Y además indicamos la dirección «url» y el puerto que vamos a utilizar!
Entonces nuestro run.py (controlador) quedó así:
#1 - Importamos clase Flask de flask (librería) from flask import Flask #2 - Creamos una app instanciando la clase Flask (automáticamente el nombre de la app) app = Flask(__name__) # 3 - Creamos una ruta de inicio con un return "Hola mundo" @app.route('/') def inicio(): return 'Hola mundo' # 4 - Ejecutamos la app si este archivo es el principal if __name__ == '__main__': app.run(debug=True)
🚀 Ahora si, venga va a probarla!. Coge un extintor de llamas por las dudas! ^^🧑🏻🚀
Para probar nuestra app bastará con ingresar en la terminal o consola. Directamente desde Visual Studio Code. Como cualquier aplicación nos posicionamos en la carpeta o directorio donde se encuentra «run.py» y ejecutamos:
python3 run.py
Inmediatamente deberíamos ver nuestra aplicación corriendo:
Como dijimos al principio del tutorial flask este framework nos sirve para realizar aplicaciones web, así que solo debemos abrir nuestro navegador e ir a la dirección que especificamos «127.0.0.1:5000» o bien si usas Visual Studio Code bastará con presionar CTRL y hacer clic en la consola sobre la dirección que indica allí donde dice «Running on http://127.0.0.1:5000«, entonces se abrirá nuestro navegador y veremos lo siguiente:
Claro que es muy humilde pero al menos funciona!. Estos son los pasos a seguir para crear una app en Flask. Ahora que ya lo sabes debes tratar de recordarlo cada vez que comiences un nuevo proyecto.
Ahora, ¿te parece justo que tu aplicación muestre solo un texto en el navegador?. Pues a mí no, me parece una deshonra para un lector de mi blog.
Así que vamos a continuar con la práctica de crear un directorio telefónico usando un diccionario como bases de datos y mientras explicarte como funciona la arquitectura MVC en la siguiente lección.
📝 Resumen del tutorial flask

- Entender Flask y MVC: Aprendimos que Flask es un micro-framework ligero para desarrollar aplicaciones web con Python, basado en la arquitectura MVC (Modelo–Vista–Controlador).
- Comparar Flask vs Django: Identificamos que Flask es ideal para principiantes por su simplicidad y flexibilidad, mientras que Django es más robusto para proyectos grandes.
- Preparar el entorno: Creamos una carpeta de proyecto (ej. “proyecto01”) con subcarpetas “static” y “templates” para vistas y archivos estáticos.
- Instalar Virtualenv: Usamos “pip install virtualenv” para gestionar entornos virtuales y evitar conflictos con librerías.
- Crear y activar entorno virtual: Ejecutamos “virtualenv venv” y activamos el entorno con “venv\Scripts\activate” (Windows) o “source venv/bin/activate” (Linux).
- Instalar Flask: Actualizamos pip con “pip install –upgrade pip” y luego instalamos Flask con “pip install flask” dentro del entorno virtual.
- Configurar el controlador: Creamos el archivo “run.py” e importamos Flask, instanciamos la app con “app = Flask(__name__)”, definimos rutas con “@app.route(‘/’)” y creamos una función de retorno.
- Iniciar la aplicación: Añadimos “if __name__ == ‘__main__’: app.run(debug=True)” para ejecutar la app y probarla en “http://127.0.0.1:5000”.
Conclusión y repaso para principiantes
Para comenzar un proyecto Flask con éxito, los novatos deben recordar la estructura base del controlador. El archivo principal, típicamente “run.py“, es el corazón del proyecto y sigue estos pasos esenciales:
- Importación: Inicia con “from flask import Flask” para usar el framework.
- Instancia de la app: Crea la aplicación con “app = Flask(__name__)“, donde “__name__” identifica el módulo actual.
- Definición de rutas: Usa decoradores como “@app.route(‘/’)” para asociar URLs a funciones, por ejemplo, “def inicio(): return ‘Hola mundo'”.
- Ejecución: Finaliza con “if __name__ == ‘__main__’: app.run(debug=True)” para lanzar el servidor en modo depuración.
Es crucial trabajar dentro de un entorno virtual para evitar conflictos, organizar carpetas (“static” para archivos estáticos y “templates” para vistas HTML), y probar la app en “http://127.0.0.1:5000”. Esta base simple pero sólida permite expandir el proyecto con rutas y funcionalidades adicionales.
Por si quedan dudas:
- Las rutas las maneja el controlador, pero en proyectos grandes no es conveniente asignarla a todas en el controlador.
- La arquitectura de los proyectos puede variar y esta que explico aquí no es una forma de disponer los elementos para un proyecto de gran envergadura. Sin embargo, siempre se tratará de Modelo – Vista y Controlador, campeón.
- ¡Si tiene alguna otra queja o reclamo por favor hable con el gerente!

Bien eso ha sido todo hasta ahora, puff. ¿Cómo venimos he?. Recuerda que si tienes dificultad con algún paso de este tutorial flask y estás aprendiendo puedes recurrir a nuestra comunidad en Discord donde tanto yo el gerente como alguno de mis súbditos (jajaj) seguro podrá despejar todas tus dudas.