Serveur Web Python avec Flask

Article générique donnant le principe pour mettre en place un serveur Web sur Raspberry, ou autre machine Linux avec Flask qui est un framework de développement web en Python.
Il en existe d’autres, le plus connu d’entre eux est Django.
Mais Flask a l’avantage d’être simple, et de permettre facilement la création d’un site web à usage principalement privé.
Cette artcile est basé mais l’excellent article sur de Flask de Miguel Grinberg Les exemples de cet article sont basés sur le site

Prérequis

Le choix ci-dessous s’est concentré sur Raspberry, mais peut être applicable à Ubuntu

Vim

Sous Raspberry nous pouvons utiliser nano pour éditer des fichiers, mais je conseille vim

sudo apt-get install vim

Afin de se familiariser avec vim, je conseille le tutoriel en ligne qui se lance avec :

vimtutor

Python 3

Installation

Pyhton 3 est installé sur Raspberry
Afin de pouvoir installé d’autres packages, il nous faut installer pip.
pip est un gestionnaire de paquets utilisé pour installer et gérer des paquets écrits en Python.
pip est un acronyme qui correspond à la fois à « Pip Installs Packages » ou à « Pip Installs Python »

sudo apt install python3-pip 

Vérification
 pip3 --version 

pip3 fonctionne toujours sur l’environnement Python3 uniquement,
pip fonctionne sur n’importe quel environnement approprié au contexte.
Par exemple, si vous êtes dans un venv Python3, pip fonctionnera sur l’environnement Python3.

Environnement virtuel Python

Installation venv

Les programmes Python utilisent souvent des paquets et modules qui ne font pas partie de la bibliothèque standard.
D’autre part, la création d’un environnement permet de s’isoler et travailler sans perturber l’installation par défaut.
Le module utilisé pour créer et gérer des environnements virtuels s’appelle venv.

 #Installation de venv
 sudo apt-get install python3-venv

Création de l’environement

mkdir flaskr 
cd flaskr
python3 -m venv venv
--> va créer un répertoire venv au niveau du répertoire courant

Généralités

#Préparation du répertoire
 mkdir -p /project1

#Création de l'environnement
 python3 -m venv /project1/venv

#Activation de l'environnement
 source ~/virtualenvs/project1/venv/bin/activate

# Chemin de notre interpréteur Python
 (project1) which python

# Installer un module, le mettre à jour
 (project1) pip install [module]
 
# Supprimer un module
 (project1) pip uninstall [module]

# Lister le contenu de notre environnement
 (project1) pip freeze

# sauvegarde de l'environnement dans l'objectif de partage
 (project1) pip freeze > requirements.txt

# Tip : Pensez à mettre à jour pip lui-même de temps en temps :
 (project1) pip install --upgrade pip

#Et pour sortir de l'environnement :
 (project1) deactivate

Activation sous emacs

Pour rappel il est également possible d’activer l’environnement de développement sous emacs

Installation du framework Flask

Dans l’environnement de développement activé
Nous installons Flask qui est un framework de développement web en Python.

 # Installer un module flask
pip install flask 

L’intérêt réside dans le fait de pouvoir utiliser des templates

The Jinja2 template engine uses the following delimiters for escaping from HTML.
 {% ... %} for Statements
 {{ ... }} for Expressions to print to the template output
 {# ... #} for Comments not included in the template output
 # ... ## for Line Statements 

Exemple basique

exemple.py

from flask import Flask
from jinja2 import Template

app = Flask(__name__)

# -----------------------------------------------------------
# O
# -----------------------------------------------------------
@app.route('/0')
def index0():
    return " Hello"

# -----------------------------------------------------------
# 1
# -----------------------------------------------------------
@app.route('/1')
def index1():
    return " \
    <h1>Tilte 1</h1> \
    <a href=\"/0\"> Hello </a> \
    <h2>Title 2</h2> \
    "

# -----------------------------------------------------------
# 2
# -----------------------------------------------------------
template2 = Template("Hello {{ name }}!")

@app.route('/2')
def index2():
    return template2.render(name='John Doe')

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

Le Lancement du Serveur WEB se fait à travers

python exemple.py

Serving Flask app "web" (lazy loading)
Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
Debug mode: on
Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
Restarting with stat
Debugger is active!
Debugger PIN: 213-589-677

L’interface WEB étant accessible à travers : http://localhost:8080/

Développement

Dans le cadre de développement d’une application, il est conseillé d’avoir une approche plus professionnelle, pour ce faire nous pouvons se baser sur les exemples données

  • sur le site Flask
  • ou à travers les exemples données dans cet article
  • ou à travers le projet Orpic

Exécution au démarrage

Afin de pouvoir exécuter le script Python au démarrage, il faut créer le script shell : run-orpic.sh
Script à rendre exécutable avec:

 chmod +x run-orpic.sh 
vi run-orpic.sh 
!/bin/bash
 source /home/pi/Orpic/.venv/bin/activate 
 python /home/pi/Orpic/src/web.py &amp; 

Ce script est ensuite lancé au démarrage de Raspberry en insérant l’exécution de ce script juste avant « exit 0 » du : rc.local

sudo vi /etc/rc.local  
.......
.......
# Run Orpic
/home/pi/Orpic/run-orpic.sh

exit 0

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *