Tutorial Flask desde cero

Tutorial flask desde ceroBienvenidos 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.

Ahora si r谩pidamente vamos a ello:

驴Qu茅 es Flask?

Citando otro post que hice sobre Flask anteriormente pero que result贸 bastante complejo ya que en el directamente integr茅 escritorios virtuales y git podemos decir o “repetir” que:

Flask es un聽Framework聽o entorno de trabajo dedicado a facilitar la creaci贸n de aplicaciones web utilizando el lenguaje de programaci贸n Python.

Tutorial Flask desde cero

  • 驴Un qu茅?
Un聽Frameworkes 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 “Pruebas con Python” 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:

Como se gestiona un proyecto de desarrollo profesional
Cuando trabajamos con un proyecto profesional, es decir, cuando nos avocamos a crear una aplicaci贸n real 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. Por lo que en vez de instalar FLASK en nuestro sistema operativo, lo instalamos dentro del entorno virtual antes mencionado.

Pero en este caso como es un “tutorial flask desde cero” me enfocar茅 en ense帽ar a usar el framework y no me detendr茅 a usar un entorno virtual. Pero m谩s adelante deberemos incluir estas “buenas pr谩cticas” en cada proyecto!

Si deseas aprender ahora a usar un entorno virtual lee la siguiente entrada: Instalar virtualenv + flask

 

Para instalar flask en nuestro sistema operativo simplemente debemos recurrir a el gestor de paquetes de Python conocido como “pip“. Si a煤n no lo tienes instalado, te explicar茅 como instalarlo:

Instalando el gestor de paquetes de python “pip”:

El gestor de paquetes de python viene como un “script de python” por lo que tiene la extensi贸n “.py” y simplemente debemos dercargarlo y ejecutarlo como cualquier archivo script de python.

Descarga el archivo “get-pip.py” desde el siguiente bot贸n: Descargar Get-PIP.py

Una vez descargado simplemente ejec煤talo abriendo la consola como lo har铆as con cualquier archivo python:

python3 get-pip.py

Recuerda que debes estar posicionado en la carpeta donde se encuentra el archivo “get-pip.py” caso contrario puedes indicar el directorio por ejemplo:

#Windows
C:\Users\alguien\Descargas>get-pip.py
#o
C:\Users\alguien\Descargas>python3 get-pip.py
C:\Users\alguien\Descargas>python get-pip.py

#Linux
#Utilizando el comando "cd" y "ls" vamos hasta la carpeta donde se descargo y ejecutamos:
python3 get-pip.py

 

 

Actualizar PIP e instalar Flask

Una vez instalado PIP simplemente bastar谩 con actualizarlo tipeando en la misma consola:

#Actualizar PIP:

python3 pip install --upgrade pip

#o

python3聽-m聽pip聽install聽--upgrade聽pip

#Luego, instala Flask:

python3聽-m聽pip聽install聽flask

Y se deber铆a instalar Flask en tu sistema. Si luego deseas desintalarlo porque aprendiste a usar entornos virtuales 馃槢 simplemente utilizas el mismo comando pero reemplazas “install” por “uninstall”.

En fin una vez instalado ver谩s una advertencia como la siguiente.instalar flask

Hecho 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!!

 

 

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.

arquitectura MVC vista en gestor de archivosTen铆amos un proyecto llamado “Pruebas en Python” donde todas las carpetas y archivos hab铆an quedado vac铆os y ten铆a la siguiente estructura que ves en la imagen.

Es momento de abrir esta carpeta con nuestro Visual Studio Code o nuestro editor favorito y comenzar a trabajar creando el controlador..

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 “images“) 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 “images“. Como ahora no vamos a usar ninguno de estos archivos, no las necesitaremos as铆 que bien podemos pasar de ellas. 馃槢

Espero que comprendas que los sub-directorios que hemos creado dentro de “Pruebas en Python” 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.

 

Importar clase flask y crear app en el controlador de nuestra aplicaci贸n

En el archivo “controlador.py”. 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 abrimos nuestro editor y tratamos de abrir el proyecto que creamos “Pruebas en Python” completo para tener en la barra lateral izquierda una disposici贸n de todos los subdirectorios y archivos correspondientes a nuestro proyecto, y abrimos el archivo “controlador.py“:

Luego importamos Flask dentro de nuestro controlador.py..

Lo siguiente ser谩 crear una aplicaci贸n para ello bastar谩 con crear una instancia de Flask, f铆jate que Visual Studio Code ya nos sugiere:

crear app flask

Por lo que nuestro controlador.py queda as铆:

from flask import Flask #Importamos clase Flask de flask (librer铆a)
app = Flask(__name__) #Creamos una app instanciando la clase Flask (autom谩ticamente el nombre de la app)

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.

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 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:

@app.route('/') #Decoramos con m茅todo de app que es una instancia de la clase Flask y argumentamos "slash"
def inicio(): #Definimos una funci贸n llamada Inicio
    return 'Esta es la p谩gina de inicio!' #Retorno de la funci贸n

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 la l铆nea 1 de este bloque de c贸digo que hemos a帽adido; 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.

Esto hemos hecho hasta ahora:

from flask import Flask #Importamos clase Flask de flask (librer铆a)
app = Flask(__name__) #Creamos una app instanciando la clase Flask (autom谩ticamente el nombre de la app)

#Rutas - (argumentos: Url) - Funci贸n

@app.route('/') #Decoramos con m茅todo de app que es una instancia de la clase Flask y argumentamos "slash" URL
def inicio(): #Definimos una funci贸n llamada Inicio
    return 'Esta es la p谩gina de inicio!' #Retorno de la funci贸n

Para que lo veas mejor y sin comentarios:

from flask import Flask
app = Flask(__name__)

#Rutas - (argumentos: Url) - Funci贸n

@app.route('/') 
def inicio():
    return 'Esta es la p谩gina de inicio!'

Entonces vamos a resumir y explicar lo que hemos hecho hasta ahora:

De nuevo; primer bloque: IMPORTAR Y CREAR INSTANCIA:

  1. Primera L铆nea: Importamos la CLASE Flask de la LIBRER脥A flask.
  2. 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:

  1. 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 pagina de inicio. Y por cierto, debemos pasarla siempre como String es decir entre comillas.
  2. Segunda linea.. Dentro de la ruta (decorador) creamos la funci贸n que va a decorar esta ruta (‘/’) y debe tener obligatoriamente un return!
  3. Tercera l铆nea dentro de la funci贸n creamos el return, es decir lo que retornar谩 la funci贸n al ser ejecutada. 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.

Ahora que me has entendido. 驴C贸mo creamos otra ruta para la url “/agradecimiento” por ejemplo?

Simplemente a帽adimos otro decorador donde dentro argumentamos la url y debajo creamos una nueva funci贸n, quedandon贸s as铆:

from flask import Flask #Importamos clase Flask de flask (librer铆a)
app = Flask(__name__) #Creamos una app instanciando la clase Flask (autom谩ticamente el nombre de la app)

#Rutas - (argumentos: Url) - Funci贸n

@app.route('/') #Decoramos con m茅todo de app que es una instancia de la clase Flask y argumentamos "slash"
def inicio(): #Definimos una funci贸n llamada Inicio
    return 'Esta es la p谩gina de inicio!' #Retorno de la funci贸n

@app.route('/agradecimiento') #Decoramos con m茅todo routes la pr贸xima funci贸n arguementando la url "/agradecimiento"
def agradecer(): #Definimos una funci贸n llamada agradecer
    return 'Gracias pythones.net!' #Retorno de la funci贸n

F铆jate el tercer bloque de c贸digo.. Es otra ruta, pero es buena pr谩ctica incluso colocar las rutas fuera del controlador, pero por ahora lo aprenderemos as铆.. Te recomiendo poner todas las “Rutas juntas”..

 

Correr o iniciar nuestra 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 controlador.py:

#Iniciar app

if __name__ == '__main__': #Condicional de que si la aplicaci贸n ejecutada se coincide al nombre de la aplicaci贸n
    app.run('127.0.0.1', 5000, debug=True) #M茅todo que inicia la app con la direcci贸n, puertos y modo de argumentos

Ahora, tercer bloque de c贸digo:

  1. 驴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!
  2. 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 vallan surgiendo y las solicitudes que se realizan. Y adem谩s indicamos la direcci贸n “url” y el puerto que vamos a utilizar!

Entonces nuestro controlador.py qued贸 as铆:

from flask import Flask #Importamos clase Flask de flask (librer铆a)
app = Flask(__name__) #Creamos una app instanciando la clase Flask (autom谩ticamente el nombre de la app)

#Rutas - (argumentos: Url) - Funci贸n

@app.route('/') #Decoramos con m茅todo de app que es una instancia de la clase Flask y argumentamos "slash"
def inicio(): #Definimos una funci贸n llamada Inicio
    return 'Esta es la p谩gina de inicio!' #Retorno de la funci贸n

@app.route('/agradecimiento') #Decoramos con m茅todo routes la pr贸xima funci贸n arguementando la url "/agradecimiento"
def agradecer(): #Definimos una funci贸n llamada agradecer
    return 'Gracias pythones.net!' #Retorno de la funci贸n

#Iniciar app

if __name__ == '__main__': #Condicional de que si la aplicaci贸n ejecutada se coincide al nombre de la aplicaci贸n
    app.run('127.0.0.1', 5000, debug=True) #M茅todo que inicia la app con la direcci贸n, puertos y modo de argumentos

 

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. En mi caso lo hago directamente desde Visual Studio Code en la terminal integrada que est谩 debajo!

Como cualquier aplicaci贸n nos posicionamos en la carpeta o directorio donde se encuentra “controlador.py” y ejecutamos:

python3 controlador.py

Inmediatamente deber铆amos ver nuestra aplicaci贸n corriendo:

flask run - tutorial flask

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:

Tutorial flask - Primer inicio de nuestra aplicaci贸n

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.

PD: No olvides acceder a la url “/agradecimiento” que creamos!. Simplemente a帽ade a la direcci贸n de tu servidor de pruebas la url.. http://127.0.0.1:5000/agradecimiento

Atenci贸n!
La gerencia gerenciando
La gerencia gerenciando..

Por si quedan dudas:

  • Aclar茅 que esto se hace usando un entorno virtual, pero estoy tratando de ense帽ar las cosas de una en una y evitando causarle m谩s confusi贸n a aquellos que son novatos o iniciantes en el uso de frameworks.
  • 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. Obviamente debemos usar BluePrints para una mejor organizaci贸n y mantenibilidad.
  • Si tiene alguna otra queja o reclamo por favor hable con el gerente!

 


 

 

Contin煤a leyendo!
Entrada anterior! Siguiente entrada!

Compartir es agradecer! :)

Hey no te vayas sin dejarme un comentario!

Este sitio usa Akismet para reducir el spam. Aprende c贸mo se procesan los datos de tus comentarios.

Aprende a programar de manera profesional!

驴Todav铆a sin obtener una retribuci贸n justa de tu aprendizaje?

Curso de Python Udemy

Conviertet茅 en un verdadero Jedy de Python y comienza a desarrollar aplicaciones de forma profesional obteniendo un certificado de Udemy!. Pasate por la secci贸n de Cursos Premium y realiza los mejores cursos con certificaci贸n v谩lida a nivel internacional por apenas unos dolares!