Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Flask est un micro framework open-source de développement web en Python.
Flask a été créé initialement par Armin Ronacher. Le souhait de son créateur était de réaliser un framework web contenu dans un seul fichier
Python.
En 2018, Flask était élu "Framework web le plus populaire".
Flask est une bibliothèque Python.
Donc pour le télécharger sur votre PC il suffit d'utiliser l'utilitaire PIP.
À partir d'un terminal windows (CMD ou Powershell) tapez la commande pip install flask
Créez un nouveau dossier à la racine de C: et nommez le python_flask.
Créez dans ce dossier un fichier nommé application.py qui doit contenir le code ci-dessous :
Ce fichier est bien sûr enregistré dans "c:\python_flask".
Dans ce script l'application se nomme "app".
On définit ensuite une "route" ; ici la racine.
Donc si on se trouve à la racine Flask va déclencher l'exécution de la fonction "bonjour" qui se contente d'afficher le message
"Bienvenue sur Flask" encadré par le conteneur H2.
Il faut ouvrir un terminal windows (CMD ou PowerShell).
Le contenu du terminal :
Je tape d'abord : cd c:\python_flask
Ensuite : python application1.py OU py application.py
Le terminal m'indique que le serveur HTTP "is running" sur le port 5000.
Dans la barre d'URL du navigateur, je saisis localhost:5000/
Le message "Bienvenue sur Flask" est alors affiché dans la fenêtre.
L'inconvénient du script est que l'on mélange du Python et du HTML.
Le recours au template permet d'éviter ce mélange de genre.
Dans le répertoire "c:\python_flask" je crée un dossier "templates" (avec un s final).
Dans ce dossier je crée un fichier "index.htm" dont le contenu est le suivant :
Il s'agit d'un fichier avec seulement du HTML et une feuille de style interne pour formater un titre de niveau 2.
Je vais maintenant modifier ce fichier.
Le serveur étant toujours actif, actualisez la page !
Le message "Soyez le bienvenu chez Flask" s'affiche en blanc sur fond gris et centré.
Donc grâce à l'emploi d'un template, je ne mélange plus le code python et le code HTML. Désormais le script ne contient que du python et le template associé ne contient que du HTML (voire du CSS et du JavaScript).
Pour l'instant notre application est statique : affichage de toujours le même message.
Je vais maintenant créer une deuxième route dans le script.
J'importe la totalité du module datetime.
Je crée ensuite une deuxième route (/now) qui appelle la fonction "horaire".
Cette fonction détermine l'horaire actuel sous forme de 2 variables : h & mn.
Cette fonction redirige vers la page "now.htm".
Notez bien les arguments de la méthode render_template que l'on peut exprimer ainsi :
redirection vers la page "now.htm" ; heure (variable dans template récupère le contenu de la variable h du script, etc.
Il faut donc créer le template "now.htm" à créer dans le sous-dossier "templates".
Le code de ce fichier :
Le code contient des variables (indiquées par une double paire d'accolades).
Démarrez le terminal windows.
Basculez vers le navigateur ; tapez localhost:5000/ pour afficher le message "Soyez le bienvenu ..." puis
tapez, toujours dans la barre d'URL localhost/now pour afficher l'heure courante.
Actualisez la page au bout d'une minute ; l'affichage a changé. Il s'agit donc d'une page dynamique.
Modifiez le code de la nouvelle route pour que s'affiche dans la page "now.htm" l'heure courante sous la forme heure-minute-seconde.
J'ai donc rajouté une liste de dictionnaires nommée "membres".
Ici l'objet "membres" de type list comprent 6 dictionnaires.
En fait une liste de dictionnaires est une structure de données aussi complexe qu'une table d'une base de données.
Tous les dictionnaires de la liste doivent avoir les mêmes clés ; ici : nom, mail et genre.
Je rajoute aussi une route qui redirige vers la page "adherents.htm" avec un passage de paramètres : liste = membres.
Je crée dans le dossier "templates" une nouvelle page nommée "adherents.htm".
Le code de cette page (extrait) :
Observez la feuille de style.
Notez le HTML dynamique : référence à la variable "liste".
Le serveur web étant actif, tapez dans la barre d'URL du navigateur : localhost:5000/adherents
La liste de dictionnaires s'affiche mais l'affichage n'est pas très joli ni lisible : crochets et accolades parasitent le contenu.
Heureusement dans le cadre d'un framework comme Flask, HTML devient un véritable langage de programmation.
Non seulement on peut manipuler des variables mais on peut aussi créer des boucles ...
On peut créer une boucle python dans une page à condition de l'encadrer par {% et %}.
L'instruction endfor est obligatoire !
Une ligne pour chaque dictionnaire ; les crochets ont disparu mais il y a toujours les accolades et les guillemets simples.
Cette fois on n'affiche que le nom et l'adresse mail de chaque adhérent et on s'est débarassé des accolades et des guillemets.
Vous savez sans doute que l'on peut passer des paramètres dans une URL.
C'est d'ailleurs ce que vous faites lorsque vous soumissionnez un formulaire basé sur la méthode GET.
Par exemple allez sur le site "pagesjaunes" et renseignez le formulaire de la page d'accueil :
Saisissez "hotel" et "Paris" puis validez.
La barre d'adresse contient alors :
http://www.pagesjaunes.fr/annuaire/ chercherlespros?quoiqui=hotel&ou=paris
Les paramètres passés correspondent à ce qui suit le ? : quoiqui = hotel & ou paris.
On parle aussi de chaine de requête.
Et plus précisément modifions la fonction liste comme suit :
J'importe désormais l'objet request de la bibiothèque flask.
Ensuite je modifie la fonction liste() en rajoutant l'instruction : sexe =request.args.get('g')
Cette instruction récupère dans la variable sexe l'argument g passé en paramètre de l'URL.
Ensuite j'affiche la valeur du paramètre g.
Le serveur étant actif, tapez en guise d'url dans le navigateur : http://localhost:5000/adherents?g=f
Observez la fenêtre du terminal. Vous lisez le message : sexe sélectionné est f
Je vais maintenant vous montrer l'intérêt de passer un (ou plusieurs) paramètres dans une URL.
À partir de la liste "membres" je construis en compréhension un nouvel objet de type "list" nommé "selection" qui correspond
soit aux femmes soit aux hommes en fonction du paramètre saisi.
Si vous avez oublié comment réaliser une liste en compréhension à partir d'une autre liste, relisez la chepitre 3 du présent tuto.
Pour chaque adhérent j'affiche : nom, mail et genre et sur une seule ligne.
On peut intégrer une boucle (avec la syntaxe python) dans un template à condition qu'elle soit délimitée par
"{%" et "%}".
Attention il faut rajouter (par rapport au Python standard) une instruction endfor toujours avec les mêmes délimiteurs.
Le serveur étant actif, tapez en guise d'url d'abord : http://localhost:5000/adherents?g=f
puis : http://localhost:5000/adherents?g=m
J'affiche successivement les femmes puis les hommes.
Donc grâce à un passage de paramètre dans l'url, je filtre la liste "membres".
Je pourrai tout aussi bien filtrer les données retournées par une requête sélection ...
Saisissez en guise d'url : localhost:5000/aderents (donc aucun paramètre) :
le template retourne une liste vide !
C'est logique ; puisque la variable sexe n'existe pas (none) la liste selection est vide.
Nous voulons qu'en l'absence de requête dans l'url, tous les adhérents soient affichés et si le paramètre saisi est erroné, par exemple
"g=h" ou "g=d", alors affichage d'un message d'erreur.
Le contenu de la fonction "liste" devient :
J'ai rajouté un test : si test existe alors filtrage de membres dans la liste selection sinon pas de filtrage.
Le code de la partie BODY devient :
Si liste vide : affichage d'un message d'erreur sinon affichage de la liste via une boucle.
Vous savez donc désormais programmer des tests dans un template mais n'oubliez pas l'instruction endif.
En utilisant le framework Flask nous avons pu remplacer la technologie CGI par le modèle MVC (Modèle Vue Contrôleur) ;
Les scripts correspondant à l'aspect Contrôle (les traitements) et les templates à l'aspect Vue (les sorties).
Je vous ai montré aussi que dans le cadre de Flask, nous pouvons utiliser un HTML grandement enrichi par intégration
de variables et de structures de contrôle. Les variables sont délimitées par des "moustaches" (double paire d'accolades) ;
les boucles et tests par des "{%" et "%}".
Avec le framework Python Django la syntaxe du "langage de gabarit" serait identique.