Ceci est une ancienne révision du document !
Flask
Mini framework pour faire une petite appli web avec des templates, du mail… : https://palletsprojects.com/p/flask/
6 tutos vidéos sympa en français : https://www.youtube.com/playlist?list=PLn6POgpklwWrbGpkwkTS-TvnXxp34srC4
5 autres sur Flask et les formulaireshttps://www.youtube.com/channel/UCABGT_MVqwPXXbdrOO_uYFQ/videos
Créer une appli Flask avec un template jinja2 et quelques routes
myapp.py :
#!/usr/bin/python # -*- coding: Utf-8 -*- from flask import Flask, render_template app = Flask(__name__) @app.route('/') @app.route('/accueil') def index(): # dictionnaire de data mesdata = {'user': 'Xavki', 'machine': 'lubuntu-18.04'} # affichage return render_template('index.html', title='Home', data=mesdata) @app.route('/hello/<string:username>') def bonjour(username): # on oblige username a être une chaine return "Page Hello " + username + " et bonjour !<br/><a href=" + url_for('index') + ">Retour</a>" if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
Dans le sous-dossier “templates”, un fichier index.html
<html> <head> <title>{{ title }} - Microblog</title> </head> <body> <h1>Hello, {{ data.user }}!</h1> <p>Tu es connecté de la machine : {{ data.machine }}</p> </body> </html>
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 = { 'user': 'Xavki', 'machine': platform.node(), 'os': platform.system(), 'dist': platform.linux_distribution(), 'interfaces': netifaces.interfaces() }
Et dans le template html :
<p>Machine : {{ data.machine }}</p> <p>OS : {{ data.os }}</p> <p>Distribution : </p> {% for elem in data.dist %} <p style="padding-left:20px">- {{ elem }}</p> {% endfor %} <p>Interfaces : </p> {% for inter in data.interfaces %} <p style="padding-left:20px">- {{ inter }}</p> {% endfor %}
Héritage de Templates jinja
https://jinja.palletsprojects.com/en/2.11.x/
Fichier HTML (base.html)
Ajouter {% block contenu %}{% endblock %} dans le fichier générique “base.html” qui contient la partie commune.
Et dans chaque fichier HTML (index.html, users.html), insérer par exemple :
{% extends 'base.html' %} {% block contenu } blabla {% endblock %}
Développement - debug
Mode développement pratique pour gérer les modifs en direct et l'accès au mode débug en console :
export FLASK_ENV=development
ou ajouter un .env contenant FLASK_ENV=development
Installer le module python-dotenv
pip install python-dotenv
Et indiquer dans le script python :
from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv())
Insertion d'images ou css
Créer obligatoirement un dossier “static” pour y mettre les images ou css et utiliser (à importer en en-tête)
urf_for('static',filename="nom_fichier")
Autre méthodes de Flask :
abort : pour retourner un code d'erreur HTTP personnalisé (404, 403, 401…)
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,nomfichier)