Flask

Structure de base d’une application Web Python+Flask

Procédure d’installation

Le fichier Python principal

Ce fichier est exécuté par un import depuis le fichier script wsgi . Il doit impérativement instancier un objet Flask(__name__) , stocké dans une variable (ici app ) pour être utilisé par le script wsgi.

Il doit se trouver à la racine du dossier du site.

Les fichiers HTML

Il est conseillé de créer des fichiers HTML qui serviront de base au contenu.

Les fichiers HTML doivent se trouver dans le sous-dossier template (modèles) du dossier du site.

Remarque : la ligne <meta name="viewport" content="width=device-width, initial-scale=1.0"> permet d’adapter correctement les dimensions de la page aux écrans de smartphone.

Toutes les explications ici : https://www.alsacreations.com/article/lire/1490-comprendre-le-viewport-dans-le-web-mobile.html

Les autres fichiers

Tous les autres fichiers nécessaires à l’élaboration des pages Web doivent se trouver dans le sous-dossier static du dossier du site :

  • feuilles de style css
  • scripts javascript
  • images

 

Routage

Lorsque l’utilisateur saisit une URL dans la barre d’adresse du navigateur, ce dernier envoie une requête au serveur Apache. Grâce à l’interface WSGI, cette requête se traduit par l’exécution d’une fonction du script principal Python, qui retourne le contenu de la page.

Le lien entre l’URL de la requête et la fonction à exécuter est réalisé par un décorateur :

Dans cet exemple, l’URL "/" correspond à l’adresse IP du Raspberry, sans rien d’autre :

On peut également utiliser des URL avec des « variables » :

 

Rendu des modèles

Les modèles (templates) sont des fichiers HTML qui peuvent être complétés dynamiquement par Flask. Le rendu est effectué par la fonction render_template() :

Avec la fonction suivante …

… le modèle pageHTML ci-dessous …

… s’affichera ainsi :

 

Remarques :

  • On peut passer à render_template() toutes les variables locales de la fonction grâce à la fonction locals() :

ne pas oublier les astérisques ** !!

 

Quelques fonctions utiles

Accès restreint

Flask peut prendre en charge la gestion des sessions utilisateur.

Les identifiants de connexion sont stockés dans un fichier users.txt , sous la forme :

Pour hacher le mot de passe, on peut utiliser la fonction suivante :

Remarque : la fonction de hachage permet d’obtenir une empreinte du mot de passe. Chaque mot de passe possède une unique empreinte, et il est impossible de retrouver le mot de passe en connaissant l’empreinte.

On peut récupérer la liste des utilisateurs sous forme d’un dictionnaire avec la fonction suivante :

 

Du coté de Flask, on utilise l’objet session , qui permet de stocker dans le navigateur, sous forme d’un cookie signé, et au contenu crypté, les données de l’utilisateur connecté.

Il faut importer l’objet session puis créer une clef de cryptage (secrète, sinon on pourrait modifier le cookie !)

Pour générer une clef secrète, on peut utiliser le code suivant, en ligne de commande :

 

Il faut bien sûr prévoir une page de connexion, (par exemple login.html), contenant un formulaire :

 

Et créer le routage vers cette page :

Remarque : l’emploi de la méthode POST pour envoyer les données saisies dans le formulaire permet d’éviter qu’elles apparaissent dans l’URL.

 

Et il faut aussi prévoir une fonction de déconnexion :

 

Par la suite, on pourra savoir si un utilisateur est connecté (et lequel !) en utilisant une fonction de ce type :

 

Actions diverses

Il est parfois nécessaire de réaliser des opérations à distance sur le Raspberry.

Il est fortement conseillé de réserver ces actions aux utilisateurs « autorisés » !

Extinction du serveur

Extinction du Raspberry

Redémarrage du Raspberry

Gestion des robots

Il existe un protocole d’exclusion des robots, appelé robot.txt,

Le fichier robots.txt, à placer la racine d’un site web, contient une liste de ressources du site qui ne sont pas censées être explorées par les moteurs de recherches.

 

Vous aimerez aussi...

Laisser un commentaire

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

*

code