Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:python:flask [2020/02/09 00:23] – francoisa | technique:python:flask [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Flask ====== | + | **Cette page est obsolète. Veuillez accéder au contenu à son nouvel emplacement : [[https://bibliotech.cemea.org/books/outils-technique/page/ |
- | + | ||
- | Mini framework pour faire une petite appli web avec des templates, du mail… : [[https:// | + | |
- | + | ||
- | 6 tutos vidéos sympa en français | + | |
- | + | ||
- | 5 autres sur Flask et les formulaires[[https: | + | |
- | + | ||
- | [[https:// | + | |
- | + | ||
- | ===== Créer une appli Flask avec un template jinja2 et quelques routes ===== | + | |
- | + | ||
- | myapp.py :< | + | |
- | + | ||
- | # | + | |
- | # -*- coding: Utf-8 -*- | + | |
- | + | ||
- | from flask import Flask, render_template | + | |
- | + | ||
- | app = Flask(__name__) | + | |
- | + | ||
- | @app.route('/' | + | |
- | @app.route('/ | + | |
- | def index(): | + | |
- | + | ||
- | # dictionnaire de data | + | |
- | mesdata = {' | + | |
- | + | ||
- | # affichage | + | |
- | return render_template(' | + | |
- | + | ||
- | @app.route('/ | + | |
- | def bonjour(username): | + | |
- | # on oblige username a être une chaine | + | |
- | return "Page Hello " + username + " et bonjour !< | + | |
- | + | ||
- | if __name__ == ' | + | |
- | app.run(host=' | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Dans le sous-dossier " | + | |
- | + | ||
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | < | + | |
- | < | + | |
- | <p>Tu es connecté de la machine : {{ data.machine }}</ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Cas avec un template plus élaboré avec des appels aux librairies plateform (pour OS local) et netifaces (pour interfaces réseau)\\ | + | |
- | On rajoute : | + | |
- | + | ||
- | < | + | |
- | import platform | + | |
- | import netifaces | + | |
- | + | ||
- | data = { | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | } | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Et dans le template html : | + | |
- | + | ||
- | < | + | |
- | < | + | |
- | <p>OS : {{ data.os }}</ | + | |
- | < | + | |
- | {% for elem in data.dist %} | + | |
- | <p style=" | + | |
- | {% endfor %} | + | |
- | < | + | |
- | {% for inter in data.interfaces %} | + | |
- | <p style=" | + | |
- | {% endfor %} | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ===== Héritage de Templates jinja ===== | + | |
- | + | ||
- | [[https:// | + | |
- | + | ||
- | Fichier HTML (base.html) | + | |
- | + | ||
- | Ajouter {% block contenu %}{% endblock %} dans le fichier générique " | + | |
- | + | ||
- | Et dans chaque fichier HTML (index.html, | + | |
- | + | ||
- | {% extends ' | + | |
- | + | ||
- | {% block contenu } | + | |
- | blabla | + | |
- | {% endblock %} | + | |
- | + | ||
- | </ | + | |
- | ===== Récupération de paramètres par URL ===== | + | |
- | + | ||
- | Ex : https:// | + | |
- | + | ||
- | < | + | |
- | from flask import request | + | |
- | + | ||
- | valeur1 = request.args.get(' | + | |
- | valeur2 = request.args.get(' | + | |
- | toutesvars = request.args | + | |
- | + | ||
- | </ | + | |
- | ===== Récupération de paramètres par POST ===== | + | |
- | + | ||
- | Dans la route de réception, il faut rajouter la méthode autorisée ' | + | |
- | + | ||
- | < | + | |
- | @app.route('/ | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Récupérer les données (passées dans le champ name=mavaleur du formulaire) avec : | + | |
- | + | ||
- | < | + | |
- | valeur = request.form[' | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | request.method vaut ' | + | |
- | + | ||
- | ===== Gestion de hash ===== | + | |
- | + | ||
- | Vérifie la validité d'un mot de passe à partir du hash | + | |
- | + | ||
- | from werkzeug.security import generate_password_hash, | + | |
- | + | ||
- | motdepasse = ' | + | |
- | + | ||
- | if check_password_hash(motdepasse, | + | |
- | + | ||
- | ===== Développement - debug ===== | + | |
- | + | ||
- | Mode développement pratique pour gérer les modifs en direct et l' | + | |
- | + | ||
- | < | + | |
- | export FLASK_ENV=development | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ou ajouter un .env contenant '' | + | |
- | + | ||
- | Installer le module python-dotenv | + | |
- | + | ||
- | < | + | |
- | pip install python-dotenv | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Et indiquer dans le script python : | + | |
- | + | ||
- | < | + | |
- | from dotenv import load_dotenv, | + | |
- | + | ||
- | load_dotenv(find_dotenv()) | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ===== Insertion d' | + | |
- | + | ||
- | Créer obligatoirement un dossier " | + | |
- | + | ||
- | < | + | |
- | urf_for(' | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Autre méthodes de Flask : | + | |
- | + | ||
- | abort : pour retourner un code d' | + | |
- | + | ||
- | redirect : pour rediriger vers une page | + | |
- | + | ||
- | ===== Méthode pour parcourir un dossier de fichiers ===== | + | |
- | + | ||
- | os.walk(dossier_a_parcourir)\\ | + | |
- | Renvoie : parent, listedossiers (dnames), listefichiers (fnames) | + | |
- | + | ||
- | os.path.join(parent, | + |