Python: Flask, un microserver web con muchas posibilidades

No soy muy dado en el mundo de Python, y de echo he hecho pocas cosas en mi carrera profesional como programador relacionado con él. Pero ahora, gracias al proyecto que llevo entre manos, mi piCarPC, me veo obligado a aprender un “poco” sobre él. Nunca lo había descartado, y era algo que ya tenía en mente hacer…

Hace muchos años ya lo descubrí en mi Curso de Postgrado de Software Libre de la UPC, pero por aquel entonces vivía una versión muy primeriza. Con la aparición de la Raspberry Pi se ha impulsado enormemente, hasta el punto de formar parte del core de la distribución más importante, Raspbian. De echo, ya no es necesario ni tan siquiera instalarlo, incluso ni las librerías del GPIO para Python, que ya vienen también incluidas.

Su gran agilidad y ligereza hacen de él uno de los lenguajes de programación preferidos para la RasPi. En mi proyecto de piCarPC lo utilizaré para crear un servidor REST y la librería que controlará el módulo de radio FM, el Si4703.

Buscando, me di de bruces (vale, no busqué demasiado…) con un framework que parece muy interesante: Flask.

Básicamente es un framework que nos permite crear un servidor http en muy pocos pasos. Casi me atrevería a afirmar que en menos que lo que necesita NodeJS para hacerlo…

Para muestra, un botón:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

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

Este sencillo código levanta un webserver que responde con un “Hello world” al invocar la raíz del sitio…

Si eres programador, no hay que ser muy avispado para ver qué se cuece en su real importancia: es más que sencillo crear una interfaz REST con menos de 4 líneas de código!!! Tan solo echad un ojo a la anotación, al mas puro estilo Java: @app.route(“/”). En efecto, esa anotación indica que el servidor responderá con la función hello() cuando invoquemos la raíz del sitio… Mas que sencillo, trivial!

Una vez visto esto, tan solo nos queda realizar severas llamadas a sistema o a otras librerías en Python. Como he comentado al principio, al ser un lenguaje mas que extendido en la RasPi, no nos va a costar nada en absoluto llevar a cabo nuestras mejores ejecuciones, ya que vamos a tener muchos recursos por internet…

Para instalarlo, basta con tener nuestro sistema actualizado (recordad el ya típico apt-get update && apt-get upgrade), y proceder del siguiente modo.

Instalamos PIP, el instalador de paquetes para Python:

pi@raspberrypi ~ $ sudo apt-get install python-pip

Y posteriormente, el propio Flask:

pi@raspberrypi ~ $ sudo pip install flask

Una vez hecho etso, ya podemos probar nuestro primer script. Para ello, creamos un fichero Python, llamado server.py (por ejemplo), y añadimos el anterior código, expuesto mas arriba…

pi@raspberrypi ~ $ nano server.py

Una vez creado, lo ejecutamos:

pi@raspberrypi ~ $ python server.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Y con esto ya tenemos corriendo nuestro sencillo webserver. Para poder comprobar su funcionamiento, basta con acceder a un explorador y solicitar la url de nuestra RasPi, por defecto al puerto 5000. Esto nos retornará por pantalla un bonito “Hello World”.

Si necesitáis acceder desde fuera de vuestra RasPi, o bien queréis cambiar el puerto al 80, basta con modificar el servidor de esta manera:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)

Y al ejecutarlo, veremos que el puerto y la dirección ha cambiado. Por cierto, también he añadido un flag opcional, que indica que queremos ver trazas de debug…

Tras ejecutarlo, y acceder al server desde el navegador, podemos ver:

pi@raspberrypi ~ $ sudo python server.py
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
 * Restarting with stat

Varias cosas a comentar:

  • indicando la dirección ip 0.0.0.0 le decimos que queremos que cualquier petición externa sea servida por igual, si indicamos localhost o 127.0.0.1 sólo se admitirá llamadas desde el mismo host
  • para parar el servidor, basta hacer Ctrl+C

Y con esto finaliza la breve introducción a Flask. Espero poder demostraros mas sobre su potencia en futuros posts.

Confío que os haya parecido interesante.

 

Jordi

 

Share Button

Deja una respuesta

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

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