Flask est un framework Web pour Python simple et agréable à utiliser. Comme il est très léger, il est un candidat de choix pour les projets Rapsberry Pi.
Comme premier programme Flask, nous allons coder une petite application « Hello World », philosophie geek oblige.
Ouvrez une fenêtre Terminal sur votre Raspberry Pi. Tout le travail sera fait directement sur le Pi.
Avant de se lancer dans la programmation, il est intéressant de créer un environnement virtuel. Ceci permettra de créer différents projets Python avec, pour chacun, les dépendances nécessaires sans interférer avec les autres projets Python.
Pour créer un environnement virtuel, il faut installer le paquet virtualenv :
sudo pip install virtualenv
Chaque projet Python sera placé dans son propre dossier. Créez un dossier pour ce premier projet puis placez-vous dans ce dossier.
mkdir ~/premierprojet
cd ~/premierprojet
Créez maintenant l'environnement virtuel pour votre projet. La commande suivante permettra donc de créer une copie de Python et des dépendances requises dans un dossier (nommé env dans cet exemple), placé sous le dossier du projet.
Pour créer un environnement virtuel qui utilisera la version de Python par défaut (avec Raspberry Pi OS, c'est la version 2.7) :
virtualenv env
ou, pour spécifier la version de Python (ici, Python 3 dont le fichier exécutable est dans le dossier /usr/bin) :
virtualenv -p /usr/bin/python3 env
Il faut indiquer au Terminal que les commandes doivent désormais être effectuées dans l'environnement virtuel.
source env/bin/activate
Vous saurez que l'environnement virtuel est activé en regardant l'invite.
Initialement, elle était comme ceci :
pi@rapsberrypi:~/premierprojet $
Maintenant, elle a une indication de l'environnement virtuel :
(env) pi@rapsberrypi:~/premierprojet $
Une fois l'environnement virtuel activé, vous n'avez plus accès aux paquets installés en dehors de cet environnement. C'est pourquoi, même si Flask était installé de base sur votre Pi, il faudra l'installer à nouveau dans l'environnement virtuel.
pip install flask
Important : à l'intérieur d'un environnement virtuel, il ne faut pas ajouter le sudo devant pip install. Avec sudo, pip afficherait le message « Requirement already satisfied: flask in /usr/lib/python2.7/dist-packages ».
Pour éditer vos fichiers de code, il est possible d'utiliser un petit éditeur tout simple comme nano. Cependant, pour plus de confort, je vous conseille d'utiliser un petit éditeur Graphique installé par défaut sur Raspberry Pi OS : Geany.
Un fichier Flask aura, à la base, la structure suivante :
from flask import Flask
app = Flask(__name__)
@app.route("/")
def une_fonction():
return ...
if __name__ == " __main__":
app.run()
ou, pour que l'application soit disponible sur les autres ordinateurs du réseau :
from flask import Flask
app = Flask(__name__)
@app.route("/")
def une_fonction():
return ...
if __name__ == " __main__":
app.run(host='0.0.0.0')
Nous retiendrons la seconde variante pour plus de flexibilité.
Les fichiers .py, qui contiendront le code Flask, seront généralement placés directement à la racine du projet.
À l'aide de Geany, créez un fichier nommé main.py, placé dans le dossier premierprojet. Notez que le fichier aurait pu porter n'importe quel autre nom (sauf flask.py, ce qui génèrerait un conflit de nom), en autant qu'il se termine par .py.
Dans ce fichier, copiez la structure de base d'un fichier Flask.
Important : sous Python, l'indentation du code a une grande importance.
Pour l'application Hello World, vous n'avez qu'une petite modification à apporter dans la fonction une_fonction :
return "Hello World"
Pour lancer l'application main.py, assurez-vous d'abord d'être placé dans le dossier qui contient le fichier main.py.
Lancez ensuite cette commande :
python main.py
La console répondra :
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Ouvrez maintenant un navigateur sur le Pi et entrez l'adresse indiquée dans le Terminal : http://0.0.0.0:5000.
Vous obtiendrez une page Web qui affiche « Hello World! ».
Puisque vous avez pris soin d'indiquer l'hôte 0.0.0.0 dans la commande app.run(), vous pouvez afficher la page Web sur un autre ordinateur qui est sur le même réseau que le Pi.
Attention : tel que mentionné dans le terminal lorsque vous lancez votre application Flask, vous devrez utiliser un serveur WSGI pour travailler sécuritairement dans un environnement de production. La combinaison Nginx et uWSGI sera alors un choix intéressant. L'utilisation de Flask seul est une option valable seulement dans un environnement de développement.
Ouvrez un navigateur sur l'ordinateur de votre choix puis lancez la page Web à partir de l'adresse IP du Pi (obtenue à partir de la commande ifconfig, section qui débute par eth0 pour le réseau câblé ou wlan0 pour le sans fil, tout de suite après le mot inet) suivie du port 5000.
Par exemple, 192.168.0.186:5000.
Une fois le travail dans l'environnement virtuel complété, vous devez le désactiver afin que les prochaines installations et les exécutions ne soient pas consignées qu'à l'environnement virtuel.
deactivate
« How to build a web application using Flask and deploy it to the cloud ». Medium. https://medium.freecodecamp.org/how-to-build-a-web-application-using-flask-and-deploy-it-to-the-cloud-3551c985e492
« How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 14.04 ». Digital Ocean. https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04
« Quickstart ». Flask. http://flask.pocoo.org/docs/1.0/quickstart/
« Python Flask Web Application on Raspberry Pi with NGINX and uWSGI ». IoT Bytes. https://iotbytes.wordpress.com/python-flask-web-application-on-raspberry-pi-with-nginx-and-uwsgi/
« Running Flask under NGINX on the Raspberry Pi ». Raspberry Pi Spy. https://www.raspberrypi-spy.co.uk/2018/12/running-flask-under-nginx-raspberry-pi/
« Make a Web App Using Python & Flask! ». Arya Boudaie's Personal Site. https://aryaboudaie.com/python/technical/educational/web/flask/2018/10/17/flask.html
« Flask Web App with Python (beginners tutorial) ». Python Spot. https://pythonspot.com/flask-web-app-with-python/
▼Publicité