Domingo, Diciembre 17, 2017

Un servidor web sencillo para la Raspberry Pi con Flask

Un servidor web sencillo para la Raspberry Pi con Flask. Portada.

En el artículo anterior vimos como instalar WordPress en la Raspberry Pi, una solución que pone a tu alcance todo un mundo de posibilidades. Sin embargo, para esto, es necesario tener montada la infraestructura LAMP, y es posible que no necesites todo esto, y tan solo quieras un servidor web sencillo, ya sea para mostrar unos datos del funcionamiento de la Raspberry Pi, o quizá mostrar una imagen que tomes con la cámara instalada en la Raspberry, o mostrar algunos datos como la temperatura, o la humedad, o lo que sea. En este caso lo que necesitas es un servidor web sencillo con Flask.

En este artículo te mostraré como instalar y poner en funcionamiento un servidor web sencillo con Flask. Como crear páginas y plantillas, y como utilizarlo para mostrar información, resultados, etc. Igualmente verás algunos ejemplos prácticos.

Un servidor web sencillo

¿Que es Flask?

Flask es un microframework para Python basado en Werkzeug y Jinja 2. Que sea microframework, se refiere a que no dispone de todas sus funcionalidades. El objetivo es mantener el núcleo tan simple como sea posible, pero a la vez dando la posibilidad de tener todo lo que necesites a base de extender este núcleo.

Así, por ejemplo, Flask no dispone de una capa de abstracción para bases de datos o para validación de formularios, pero soporta complementos que pueden añadir esta funcionalidad a tus aplicaciones web, como si estuvieran implementados en Flask.

Instalando Flask, nuestro servidor web sencillo.

Una vez introducido Flask, vamos a meternos en harina. Lo primero, instalamos lo que necesitamos. Para ello solo tienes que entrar en tu Raspberry Pi, vía SSH, y ejecutar lo siguiente,

sudo apt install python3-flask

Nuestra primera página

Ahora que ya tenemos instalado todo lo que necesitamos, vamos a crear nuestra primera aplicación web. Para ello crea un archivo ~/ejemplo.py con el siguiente contenido,

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hola():
    return '<html><body><h1>¡Hola Mundo!</h1></body></html>'

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

Guarda el archivo, ejecuta el siguiente comando,

python3 ejemplo.py

Ya tienes tu servidor en marcha, tan solo tienes que abrir un navegador e ir a la dirección IP de tu Raspberry Pi, al puerto 5000. Así en mi caso es http://192.168.1.48:5000. Lo que verás será lo siguiente,

Un servidor web sencillo para la Raspberry Pi con Flask. Ejemplo 1.

Otra página

Crear una segunda página en nuestro servidor web sencillo, es tan fácil como añadir el siguiente código al archivo anterior (antes de if __name__==...),

@app.route('/sorpresa')
def sorpresa():
    return '<html><body><h1>¡Sorpresa!</h1></body></html>'

Si ahora visitamos la página http://192.168.1.48:5000/sorpresa, lo que veremos será lo siguiente.

Un servidor web sencillo para la Raspberry Pi con Flask. Ejemplo 2.

Por supuesto podemos añadir una hoja de estilo. Esta hoja de estilo hay que situarla en un subdirectorio. Así si nuestro archivo es ~/flask/ejemplo.py, la hoja de estilo estará en ~/flask/static/style.css. Nuestra nueva página, será,

@app.route('/conestilo')
def conestilo():
    return '<html><head><link rel="stylesheet" href="/static/style.css"/></head><body><h1>Una página con estilo</h1></body></html>'

Un aspecto interesante y a tener en cuenta es que si modificas el archivo ~/flask/ejemplo.py, este se recarga, con lo que cuando accedas de nuevo a una de las páginas podrás ver lo que hayas modificado.

Un servidor web sencillo para la Raspberry Pi con Flask. Ejemplo 3.

Las plantillas

Una de las características mas interesantes que tiene Flask son las plantillas. Esta característica precisamente será la que utilicemos en próximos artículos para mostrar información.

Para poder hacer uso de las plantillas tenemos que crear un directorio llamado templates. La ubicación de este directorio será ~/flask/templates/. En este directorio colocaremos nuestra primera plantilla. Por ejemplo,

<!DOCTYPE html>
<html>
    <head>
        <link rel='stylesheet' href='/static/style.css'>
    </head>
    <body>
        <h1>Información sobre la Raspberry Pi:</h1>
        <p><strong>Máquina:</strong> {{ data[0] }}</p>
        <p><strong>Sistema operativo:</strong> {{ data[1] }}</p>
        <p><strong>Temperatura: </strong>{{ data[2] }}</p>
        <p><strong>Uso de memoria: </strong>{{ data[3] }}%</p>
    </body>
</html>

Y tendremos que añadir el siguiente código en ~/flask/ejemplo.py,

@app.route('/info')
def info():
    afile = open('/sys/class/thermal/thermal_zone0/temp', 'r')
    temp = afile.read()
    afile.close()
    temp = temp[:-1]
    temp = str(float(temp) / 1000.0) + ' ºC'
    mem = psutil.virtual_memory()[2]
    data = [platform.machine(), platform.system(), temp, mem]
    return render_template('index.html', data=data)

Así cuando visitemos la página http://192.168.1.48:5000/info, veremos lo siguiente,

Un servidor web sencillo para la Raspberry Pi con Flask. Ejemplo 4.

Para poder utilizar esta última función, tenemos que importar dos módulos adicionales como son platform y psutil. Igualmente tendremos que importar la función render_template. Así, nuestras importaciones al incicio del archivo quedarán de la siguiente manera,

from flask import Flask, render_template
import platform
import psutil

Iniciando nuestro servidor web sencillo con la Raspberry

Llegados a este punto, y ahora que empiezas a tener claro las posibilidades que nos ofrece esto de Flask, querás que este servidor web sencillo se inicie con la Raspberry Pi.

Sin problemas, iniciar nuestro servidor web sencillo con la Raspberry Pi, es tan sencillo, como crear una nueva tarea en cron. Para ello, solo tienes que ejecutar la orden crontab -e, y añadir el siguiente código al final del archivo que se ha abierto,

@reboot /usr/bin/python3 /home/pi/flask/ejemplo.py

Debes prestar atención a la ubicación del archivo donde tienes tanto la página como los directorios donde están tanto las plantillas como las hojas de estilo, para que todo cuadre. De esta manera la próxima vez que se inicie la Raspberry, tendrás tu servidor en funcionamiento.

GitHub

En el repositorio de GitHub donde se encuentran los scripts para Raspberry, encontrarás el código que he utilizado para este ejemplo. Así puedes descargar los diferentes archivos ejecutando las siguientes órdenes,

cd  ~
mkdir flask
mkdir flask/static
mkdir flask/templates
cd flask
wget https://raw.githubusercontent.com/atareao/raspberry-scritps/master/flask/ejemplo-01.py
cd static
wget https://raw.githubusercontent.com/atareao/raspberry-scritps/master/flask/static/style.css
cd ../templates
wget https://raw.githubusercontent.com/atareao/raspberry-scritps/master/flask/templates/index.html
wget https://github.com/atareao/raspberry-scritps/blob/master/flask/templates/page.html

Conclusiones

Con esto ya tienes una idea clara de por donde empezar y como, pero sobre todo te has podido hacer una idea del potencial que tiene, y de las posibilidades que ofrece de mostrar información de forma muy, pero que muy sencilla.

Posteriormente, en otros artículos veremos como podemos utilizar este servidor web sencillo y darle diferentes utilidades. Empezando por monitorizar la temperatura y humedad de un local, pasando por un cuestionario y terminando por una webcam a tiempo real.

 

Más información:

Fuente: atareao

¿Quién está en línea?

Hay 101 invitados y ningún miembro en línea

Contador de Visitas

9076074
Hoy Hoy 822
Ayer Ayer 995
Esta semana Esta semana 5913
Este mes Este mes 14841
Total de Visitas Total de Visitas 9076074

Día con más
visitantes

11-11-2017 : 2493

Gracias por su visita