Hola mundo con Flask

Sin duda una de las grandes ventajas que tiene desarrollar aplicaciones web con Flask es lo sencillo que resulta si conocemos el lenguaje de programación Python y las pocas líneas que son necesarias para lanzar una aplicación del estilo ‘Hola mundo!’.

Aplicación sencilla con Flask

Vamos a ver lo sencillo que resulta escribir un Hola mundo con Flask.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hola_mundo():
    return '<h1>Hola mundo con Flask!</h1>'

if __name__ == '__main__':
    app.run()

Podemos ejecutar nuestra aplicación de ‘Hola mundo!’ escribiendo en un terminal la siguiente instrucción.

python app.py

Nos mostrará el siguiente mensaje:

* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
* Running on http://127.0.0.1:5000 
(Press CTRL+C to quit)

¿Qué nos está diciendo nuestro terminal con este mensaje?

  • Nuestra aplicación Flask se está sirviendo ‘nombre_de_nuestro_archivo’.
  • Tenemos el modo debug desactivado.
  • Nos indica que el servidor del que dispone Flask es un servidor de desarrollo y no se recomienda para producción. Nos recomienda un servidor WSGI para producción.
  • Nuestra aplicación está corriendo en http://127.0.0.1:5000

Información a tener muy en cuenta cuando iniciamos nuestra aplicación por primera vez.

Ejecutando nuestra aplicación Flask

Por el momento vamos a centrarnos únicamente en la última parte de la información que nos ha mostrado. Vamos a ir a nuestro navegador y abriremos la url que nos indica → http://127.0.0.1:5000. Veremos como nuestra aplicación de ‘Hola mundo!’ se abre y nos muestra un mensaje en pantalla.

Hola mundo con Flask visto en Brave
Hola mundo visto en el navegador Brave

Si vemos el código fuente de nuestro archivo podemos observar que se trata del h1 que hemos retornado desde la función hola_mundo().

<h1>Hola mundo con Flask!</h1>

Analizando el código de nuestra aplicación

Vamos a ver línea a línea el código de la aplicación en Flask que acabamos de crear. Es muy recomendable que entendamos el funcionamiento de Flask, de esta forma nos resultará todo mucho más divertido.

from flask import Flask

De la primera línea tenemos poco que explicar, importamos la clase Flask.

Aun así imprimiremos en pantalla el tipo de Flask para ver que realmente estamos importando una clase.

from flask import Flask
print(type(Flask))
print(Flask)

# <class 'type'>
# <class 'flask.app.Flask'>

En la siguiente línea de código que encontramos creamos una instancia de esta clase Flask pasando como argumento __name__.

app = Flask(__name__)

Puedes leer este tema si no sabes qué significa instanciar una clase en Python.

De la misma forma vamos a imprimir algunos valores.

app = Flask(__name__)
print(f'El tipo de app → {type(app)}')
print(f'El valor de app → {app}')
print(f'El tipo de __name__ → {type(__name__)}')
print(f'El valor de __name__ → {__name__}')

# El tipo de app → <class 'flask.app.Flask'>
# El valor de app → <Flask 'app'>
# El tipo de __name__ → <class 'str'>
# El valor de __name__ → app

La instancia de la clase Flask será nuestra aplicación WSGI (documentación oficial sobre Web Server Gateway Interface) y le pasamos como parámetro ‘__name__’, de esta forma estamos indicando que estamos en el módulo principal de nuestra aplicación, necesario para poder indicar en el futuro dónde se encuentran los archivos estáticos de nuestra aplicación.

Las tres líneas siguientes de código las vamos a ver juntas, ya que van muy ligadas entre sí.

Tenemos un decorador, una función y un bloque de código dentro de la función que retorna un título.

@app.route('/')
def hola_mundo():
    return '<h1>Hola mundo con Flask!</h1>'

Los decoradores en Python envuelven e inyectan funcionalidad adicional a las funciones. En nuestro caso el decorador route() está decorando la función de la vista para registrarla con la regla de URL. Por debajo está llamando a add_url_rule().

Importante → Mediante el decorador route le estamos diciendo internamente a Flask con qué URL debe ejecutar cada una de las funciones.

route(rule**options)

  • rule → string para el endpoint.
  • **options → opciones que veremos más adelante.

Vamos a modificar el argumento rule que enviamos para ver cómo cambia nuestro endpoint.

Modificaremos únicamente ‘/’ por ‘/holamundo’.

@app.route('/holamundo')
def hola_mundo():
    return '<h1>Hola mundo con Flask!</h1>'

Una vez realizado el cambio tendremos que detener nuestro servidor pulsado ctrl-c.

Ahora si arrancamos nuestra aplicación nuevamente y vamos al navegador http://127.0.0.1:5000 vemos que no aparece nada, tenemos que ir al endpoint que acabamos de modificar http://127.0.0.1:5000/holamundo.

Aplicación Flask cargando en el nuevo endpoint

Seguimos con el código de nuestro archivo app.py.

De la función que retorna el valor del título no vamos a ver nada, es bastante sencilla, únicamente retorna un h1. Desde aquí podemos aprender mucho más sobre las funciones en Python.

Pasamos directamente a la estructura if que aparece al final de nuestro archivo. Con esta estructura y gracias a la variable __name__ estaremos detectando si nuestro archivo está siendo llamado directamente desde el intérprete o se ha cargado como módulo desde otro archivo principal.

if __name__ == '__main__':
    app.run()

En nuestro caso, al tratarse del archivo principal de la aplicación esta variable contiene el valor __main__ y ejecuta nuestra app.

Modo debug con Flask

Ahora mismo nuestra aplicación de ‘Hola mundo!’ está configurada para que cada vez que realizemos un cambio en nuestra aplicación Flask tengamos que volver a reiniciar nuestro servidor, de otra forma los cambios que hayamos realizado no se verían reflejados en el archivo HTML.

Para no tener que estar deteniendo nuestro servidor en cada modificación de código que hagamos podemos modificar el modo debug que viene por defecto.

Uno de los mensajes que vimos al comenzar esta entrada, que nos mostró el terminal cuando arrancamos el servidor fue el siguiente.

* Debug mode: off

Activar el modo debug nos proporciona una interesantísima herramienta de depuración para detectar posibles soluciones cuando estemos cometiendo algunos errores. Por otro lado, podremos estar viendo las modificaciones en nuestra aplicación sin tener que reiniciar nuestro servidor cada vez que se realizan cambios en el código.

  • Herramienta depuración.
  • No es necesario reiniciar el servidor para ver los cambios.

Importante → Activar este modo NO ES NADA RECOMENDABLE en producción, debemos utilizarlo solo en desarrollo.

if __name__ == '__main__':
    app.run(debug=True)

Si reiniciamos nuestro servidor con este cambio podemos ver que aparecen nuevos mensajes en el terminal.

* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 129-390-824

Vemos que nuestro modo debug se activó correctamente. Nosotros trabajaremos siempre en desarrollo con el modo debug activado.

Ahora cada vez que realicemos modificaciones en el código solo tendremos que actualizar nuestro navegador para ver los cambios, no hará falta que reiniciemos el servidor.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *