Cree un servidor web Python básico con Flask

Flask es un micro-framework basado en Python para crear páginas web. Se puede usar para presentar interfaces basadas en web en Pi y es relativamente fácil de configurar. Es útil para crear paneles y lo encontré por primera vez cuando buscaba un método para crear el panel de control de mi piscina infantil.

Este tutorial explicará cómo crear un sitio básico para comenzar. Una vez que tenga un ejemplo que funcione, la documentación oficial se puede usar para pasar a temas más avanzados.

Yo uso Python 3 en este tutorial. Debería funcionar igual con Python 2, pero deberá reemplazar todas las referencias a «python3» con «python».

Crear una nueva tarjeta SD

Para evitar conflictos con otro software que pueda haber instalado, recomendaría comenzar con una nueva tarjeta SD escribiendo en ella la última imagen de Raspbian. Uso grabador para escribir imágenes de Raspberry Pi y para mis experimentos iniciales con Flask usé la imagen de Jessie Lite de la página de descarga oficial.

Habilitar SSH

Por defecto, SSH está deshabilitado. Si desea configurar el Pi a través de la red desde otra computadora, puede habilitarse mediante:

  • Crear un archivo en blanco llamado «ssh» en la partición de arranque (en Windows, esta es la única partición a la que puede acceder)
  • Uso de la utilidad raspi-config para habilitar SSH con un monitor y un teclado conectados a la RasPi

Eche un vistazo a la guía Habilitación de SSH en Pi para obtener más información.

Buscar dirección IP

Averigua la dirección IP de tu Pi. Si está utilizando un monitor y un teclado, puede ejecutar:

ifconfig

Lo más probable es que tenga el formato 192.168.#.#. Al escribir este tutorial, mi Pi estaba usando 192.168.1.19.

Si se está conectando de forma remota a través de SSH, puede usar un escáner de IP para encontrarlo o aparecerá en algún lugar de la configuración de su enrutador.

Actualizar y cambiar contraseña

Al habilitar SSH, recomiendo encarecidamente cambiar la contraseña predeterminada de «raspberry».

Utilizar :

passwd

Establezca la nueva contraseña y luego ejecute:

sudo raspi-config

Seleccione «Avanzado» seguido de «Expandir sistema de archivos».

Para asegurarnos de que instalaremos los paquetes más recientes, ejecute los siguientes dos comandos:

sudo apt-get update sudo apt-get -y upgrade

Este proceso puede tardar de 5 a 10 minutos.

Instalar pipa

Antes de que podamos instalar Flask, necesitamos instalar pip, el administrador de paquetes de Python:

sudo apt-get -y install python3-pip

Instalar matraz

Ahora es el momento de instalar Flask:

sudo pip3 install flask

Recibí algunos errores en la salida, pero al final informó «Frasco instalado con éxito».

Crear aplicación Flask de prueba

Ahora que Flask está instalado, necesitamos crear un pequeño sitio de prueba para comprobar que todo funciona. En este tutorial asumiré que el sitio de prueba se llama «testSite». Puede usar el nombre que desee, pero deberá intercambiar todas las referencias a «testSite» con su nombre. Crear una nueva carpeta :

cd ~ mkdir testSite

Navegue a la nueva carpeta y use el siguiente comando para crear una nueva secuencia de comandos de Python:

cd testSite sudo nano testSite.py

Luego pega el siguiente código:

from flask import Flask app = Flask(__name__)  @app.route("/") def index():  return "<html><body> <h1>Test site running under Flask</h1>  </body></html>"  if __name__ == "__main__":  app.run(host="0.0.0.0",debug=True)

Presiona «CTRL-X», «Y» y «Enter» para guardar y volver al símbolo del sistema.

Este script define un sitio web simple de una página.

Probando el servidor web Python

Ahora puede ejecutar el script usando:

python3 testSite.py

Si visita la dirección IP de su Pi en un navegador, el sitio de prueba debería estar visible:

Tenga en cuenta que Flask usa el puerto 5000 de forma predeterminada y debe reemplazar 192.168.1.19 con la dirección IP real de su Pi.

Adición de páginas adicionales

El script se puede modificar para agregar «páginas» adicionales. Eche un vistazo al ejemplo a continuación:

from flask import Flask app = Flask(__name__)  @app.route("/") def index():  return "<html><body> <h1>Test site running under Flask</h1>  </body></html>"  @app.route("/hello") def hello():  return "<html><body> <h1>This is the hello page</h1>  </body></html>"   if __name__ == "__main__":  app.run(host="0.0.0.0",debug=True)

Agrega una «ruta» adicional llamada «hola». Esta página se mostrará cuando visite el subdirectorio hola:

Aún más rutas

También puede extraer información de la URL en su secuencia de comandos para crear combinaciones de páginas más elaboradas. En este ejemplo, hemos agregado las rutas /user/ y /post/.

 from flask import Flask,render_template app = Flask(__name__)  @app.route("/") def index():   data=['Index Page','My Header','red']   return render_template('template1.html',data=data)  @app.route("/hello") def hello():   data=['Hello Page','My Header','orange']   return render_template('template1.html',data=data)   @app.route('/user/&lt;username&gt;') def show_user(username):     # show the user profile for that user     return 'User %s' % username  @app.route('/post/&lt;int:post_id&gt;') def show_post(post_id):     # show the post with the given id, the id is an integer     return 'Post %d' % post_id   if __name__ == "__main__":   app.run(host="0.0.0.0",debug=True) 

Introduzca :5000/user/john o :5000/post/42 y se mostrará una página con el nombre o el ID de la publicación como parte del contenido.

Uso de páginas de plantillas

En lugar de definir su página HTML dentro del script, puede usar archivos de plantilla para contener la mayor parte del HTML. Esto hace que el script sea mucho más fácil de manejar cuando sus páginas son un poco más complicadas.

Flask busca plantillas en el directorio «plantillas». Cree un nuevo directorio para plantillas:

mkdir /home/pi/testSite/templates cd /home/pi/testSite/templates nano template1.html

Luego pegue esta plantilla de ejemplo:

<!DOCTYPE html> <html> <head> <title>{{ data[0] }}</title> <link rel="stylesheet" href="https://revhardware.com/static/style.css" /> </head> <body> <h1>{{ data[1] }}</h1> Favourite Colour : {{ data[2] }} </body> </html>

El testSite.py se puede actualizar con:

nano testSite.py

y el contenido reemplazado por:

from flask import Flask,render_template app = Flask(__name__)  @app.route("/") def index():  data=['Index Page','My Header','red']  return render_template('template1.html',data=data)  @app.route("/hello") def hello():  data=['Hello Page','My Header','orange']  return render_template('template1.html',data=data)   if __name__ == "__main__":  app.run(host="0.0.0.0",debug=True)

Cuando se activan las dos “rutas” se usa la misma plantilla pero los valores que se le pasan son diferentes. Así que el visitante ve una página ligeramente diferente.

Puede mejorar las plantillas con HTML y CSS. Lo mejor de las plantillas es que mantienen la secuencia de comandos principal de Python centrada en la funcionalidad y dejan el diseño y la estética en el archivo de la plantilla.

Modo de depuración

En los ejemplos, el indicador de «depuración» se establece en Verdadero. Esto ejecuta Flask en modo de depuración, lo que recarga automáticamente Flask cuando actualiza el script. También proporciona mensajes de error si la página no se carga. Si expone el sitio a Internet, el indicador de depuración debe establecerse en False.

Script de ejecución automática en el arranque

Si desea que la secuencia de comandos de Python se ejecute automáticamente cuando se inicia Pi, puede usar esta técnica:

crontab -e

Si se le solicita, seleccione un editor para usar. Tiendo a usar «nano». Inserte la siguiente línea en la parte inferior del bloque de comentarios:

@reboot /usr/bin/python3 /home/pi/testSite/testSite.py &

Presiona «CTRL-X», «Y» y «Enter» para guardar y volver al símbolo del sistema.

Cuando reinicie, se ejecutará «testSite.py». El “&” asegura que se ejecuta en segundo plano.

sudo raspi-config

Seleccione «Opciones de arranque» y «Escritorio/CLI». Luego, seleccione «Inicio de sesión automático en la consola». Esto significa que cuando Pi se inicie, iniciará sesión automáticamente como usuario de Pi.

Reiniciar usando:

sudo reboot

y sus páginas web deberían estar disponibles en la dirección IP de Pi en su red.

Descargar guiones

Los scripts de ejemplo y las plantillas de este tutorial están disponibles en mi repositorio de BitBucket. Se pueden descargar usando estos enlaces: testSite1.py testSite2.py testSite3.py testSite4.py template1.py

Puede descargar directamente a su Pi usando:

wget <url>

donde es una de las URL del script anteriores. Recuerde descargar los archivos en el directorio correcto. Las plantillas deben ir en el directorio «plantillas».

Documentación oficial y otros recursos

Hay mucha más información en la página de documentación oficial de Flask.

También vale la pena echarle un vistazo al tutorial Raspberry Pi Foundation – Build a Python Web Server with Flask.