Tutoriel Flask : bases, fonctionnement et premiers pas avec Python
Flask est un framework Web particulièrement léger, intéressant aussi bien pour les débutants que pour les professionnels. Flask se concentre sur l’essentiel et permet l’implémentation de bibliothèques externes pour étendre ses fonctionnalités.
Python et les frameworks Web
Python est l’un des langages de programmation Web les plus populaires, notamment car il encourage l’utilisation de code court et simple. Son style de programmation bien structuré réduit les erreurs et les utilisateurs sont, en règle générale, vite à même de comprendre un tutoriel Python. Développé par Guido van Rossum en 1991, il est désormais utilisé et maintenu par une vaste communauté sous l’égide de l’association à but non lucratif Python Software Foundation. Python est open source et indépendant de toute plateforme. En tant que langage dynamique, Python supporte entre autres la programmation orientée objet et fonctionnelle, ainsi que la journalisation et peut être exécuté comme script CGI.
Pour la création et le développement de sites Web dynamiques et d’autres applications Web, différents frameworks Web sont proposés pour Python. Ils fournissent le code nécessaire pour faciliter le processus de développement et simplifier les tâches récurrentes. Les erreurs ou éventuels problèmes Python peuvent ainsi être évités et les services Web fonctionnent de manière plus sécurisée et rapide. Les fonctions fréquemment requises peuvent être adoptées directement et ne nécessitent pas de programmation indépendante. L’un des frameworks les plus connus pour Python est Django, qui, en tant que solution full stack comparée à Flask vs Django, offre une large gamme d’outils différents, mais est également relativement fixé et rigide. L’alternative peut-être la plus connue à cela est Flask.
Qu’est-ce que le framework Flask ?
Si les frameworks full stack tels que Django offrent aux développeurs leurs propres bibliothèques, Flask suit une approche différente. Ce framework Web, lancé par le développeur autrichien Armin Ronacher en 2010, adopte une approche plus minimaliste. Flask se limite volontairement à l’essentiel en intégrant le moteur de templates Jinja et la bibliothèque « Werkzeug », tout en offrant la possibilité d’ajouter facilement des fonctionnalités tierces. Le framework Flask est distribué sous licence BSD, il est gratuit et open source. Conçu comme une alternative aux frameworks plus complets comme Django, Flask Python a rapidement séduit une large communauté d’utilisateurs et de développeurs.
Configurer Flask et créer une application Web
Avant de configurer Flask pour Python, assurez-vous que vous disposez de la configuration requise. Cela inclut l’installation de Python 3. De plus, vous aurez besoin d’un éditeur de texte ou d’un environnement de développement et d’un accès à Internet. Il est aussi utile de disposer de connaissances de base sur Python : comprendre la programmation, les types de données, et les boucles for peut être avantageux. Flask constitue un bon point de départ pour apprendre comment développer des applications Web. Vous configurez le framework comme suit :
- Créez un environnement virtuel afin de séparer le nouveau projet de vos autres bibliothèques ou projets Python. Sinon, cela peut entraîner des problèmes avec votre système. Pour cela, le code est le suivant :
$ python -m venv nouveauprojet- Installez Flask. Pour cela, il est préférable d’utiliser le gestionnaire de paquets
pip. La commande appropriée est la suivante :
$ pip install flask- Pour vérifier si l’installation a réussi, utilisez cette commande :
python -c "import flask; print(flask.__version__)"- Vous pouvez maintenant tester Flask et créer une application de base simple. Pour cela, ouvrez un fichier dans votre répertoire. Dans notre exemple, nous l’appelons start.py et utilisons
nanopour l’ouvrir :
$ nano start.py- Dans ce fichier, écrivez le code suivant :
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello World!"-
Enregistrez et fermez le fichier.
-
Avec la variable d’environnement
FLASK_APP, indiquez à Flask où se trouve le fichier correspondant :
$ export FLASK_APP=start- Avec
FLASK_ENV, exécutez le fichier en mode développement :
$ export FLASK_ENV=development- Exécutez ensuite l’application :
$ flask runLa sortie ressemble alors à ceci :
- Serving Flask app "start" (lazy loading)
- Environment: development
- Debug mode: on
- Running on [IP address]/ (Press CTRL+C to quit)
- Restarting with stat
- Debugger is active!
- Debugger PIN [PIN]OutputAvantages et inconvénients du framework Flask
Il y a de très bonnes raisons d’utiliser Flask. Néanmoins, il n’est pas exempt de défauts. Par conséquent, cela vaut la peine d’examiner de plus près les atouts et les limites de ce framework Web.
Avantages
✓ Son périmètre : il y a peu de chances que vous trouviez un framework plus léger que Flask en Python. Flask s’installe et s’utilise rapidement. ✓ Sa flexibilité : Flask se distingue aussi par sa grande flexibilité. Vous pouvez résoudre des problèmes et intégrer les bibliothèques dont vous avez besoin, tout en traitant chaque projet individuellement. ✓ La courbe d’apprentissage : Flask est maîtrisable très rapidement à l’aide d’un tutoriel Flask. Ce framework est indéniablement simple, mais peut aussi être utilisé pour des projets ambitieux. Flask est une option de choix, tant pour les débutants que pour les professionnels. ✓ Open source : le framework Flask est open source et disponible gratuitement. Vous n’avez qu’à l’essayer et décider si c’est le bon outil pour vos besoins. ✓ La communauté : Flask rassemble une gigantesque communauté qui fournit conseils et soutien aux néophytes et aux développeurs plus avancés. Les questions et erreurs trouvent rapidement des réponses et des solutions.
Inconvénients
✗ Son périmètre : selon l’utilisation prévue, son périmètre minimaliste peut s’avérer être une limite. Chaque outil requiert une installation individuelle. Les frameworks concurrents donnent accès à un nombre beaucoup plus élevé de fonctionnalités. ✗ Dépendance vis-à-vis des fournisseurs tiers : l’utilisation de bibliothèques externes est toujours une possible source d’erreurs, mais Flask est dépendant de ces dernières. ✗ La maintenance : tandis que d’autres frameworks sont maintenus automatiquement, Flask délègue cette responsabilité à l’utilisateur. Ceci signifie un contrôle plus élevé, mais crée plus de travail.
Exemple Flask « Hello World! » : routage, modèles et API
Pour mieux comprendre le fonctionnement de base de Flask, voici un exemple simple illustrant les concepts fondamentaux du framework Web. Nous allons créer une application Web basique afin de montrer comment le routage, les modèles et une API REST interagissent. L’exemple se compose de deux fichiers :
app.py: ce fichier contient le code Python.templates/hello.html: ce fichier correspond à un modèle Jinja2 permettant d’afficher dynamiquement la page Web.
Le fichier app.py se présente comme suit :
from flask import Flask, jsonify, render_template, request
app = Flask(__name__)
@app.route("/")
def home():
return "Hello World!"
@app.route("/greet/<name>")
def greet(name):
return render_template("hello.html", name=name)
@app.route("/api/square", methods=["GET"])
def square():
number = request.args.get("number", default=0, type=int)
result = number ** 2
return jsonify({"number": number, "square": result})
if __name__ == "__main__":
app.run(debug=True)pythonCeci est le fichier hello.html, qui sert de modèle :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Greeting</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
<p>Welcome to Flask with Jinja2 template.</p>
</body>
</html>htmlÀ l’aide de @app.route, nous définissons différents points de terminaison. Il s’agit d’URL auxquelles le serveur peut répondre. La page d’accueil (/) affiche simplement le texte « Hello World! ». Grâce à un chemin dynamique (greet/<name>), il est possible d’afficher une salutation personnalisée. Le nom est extrait de l’URL et transmis au modèle Jinja2, qui l’insère dans le code HTML (voir le code du fichier templates/hello.html).
Nous montrons également comment créer une petite API REST. À l’aide du point de terminaison /api/square, l’utilisateur peut transmettre un nombre comme paramètre d’URL, et l’application renvoie le carré de ce nombre sous forme de réponse JSON. Cet exemple illustre que Flask permet aussi bien de gérer des pages Web classiques que des points de terminaison API. Les contenus dynamiques peuvent être intégrés facilement dans le HTML à l’aide de modèles, sans devoir modifier manuellement la page.
Bien entendu, ce code ne constitue qu’un exemple minimal dans le cadre d’un tutoriel Flask. Il sert avant tout à illustrer les concepts de base. Dans une application réelle, il convient de prendre en compte des aspects tels que la gestion des erreurs, la sécurité, la validation des données et une structure de projet claire afin de garantir la stabilité, la fiabilité et la maintenabilité de l’application.
Extensions Flask couramment utilisées
Comme Flask adopte une approche très minimaliste, de nombreuses fonctionnalités courantes, telles que la connexion à une base de données, l’authentification ou la validation de formulaires, ne sont pas intégrées par défaut. Pour ajouter ces fonctions, on s’appuie sur des extensions Flask, développées et maintenues par la communauté. Celles-ci s’intègrent facilement dans une application Flask et permettent d’élargir considérablement les fonctionnalités disponibles, sans avoir à modifier le framework lui-même. Les développeurs peuvent ainsi sélectionner précisément les composants dont ils ont réellement besoin et concevoir leur application de manière modulaire. Les extensions suivent généralement la philosophie de Flask et bénéficient d’une documentation complète.
Exemples d’extensions Flask importantes :
- Flask-SQLAlchemy : extension dédiée à la connexion aux bases de données. Elle intègre l’ORM SQLAlchemy dans Flask et permet de travailler simplement avec des bases de données à l’aide de classes Python.
- Flask-WTF : cette extension facilite la création et la validation de formulaires Web. Elle inclut des mécanismes de sécurité, comme la protection contre les attaques CSRF, et simplifie la gestion des données saisies par les utilisateurs.
- Flask-Login : comme son nom l’indique, Flask-Login simplifie la gestion des utilisateurs et de l’authentification. L’extension prend en charge le statut de connexion, les sessions ainsi que la protection de l’accès à certaines routes.
- Flask-Migrate : Flask-Migrate fournit des fonctions de migration de base de données permettant de gérer automatiquement les modifications de structure. Elle est particulièrement adaptée lorsqu’elle est utilisée avec Flask-SQLAlchemy pour appliquer des mises à jour de manière structurée.
- Flask-RESTful : cette extension simplifie la création d’API REST. Elle met à disposition des ressources, des routes et des méthodes HTTP telles que
GET,POST,PUTouDELETEselon une approche standardisée.
Structure d’un projet Flask et bonnes pratiques
Pour les projets Flask, il est recommandé de choisir dès le départ une organisation de projet claire et structurée. Même si, d’un point de vue technique, de petites applications peuvent fonctionner dans un seul fichier, une structure propre facilite considérablement la maintenance et l’évolution de l’application.
Dans les projets de plus grande envergure, on crée généralement des répertoires comme templates pour les fichiers HTML, static pour les feuilles de style CSS, le JavaScript et les images, ainsi que app ou src pour les modules Python. À l’intérieur du dossier app, des sous-dossiers dédiés aux blueprints, aux modèles, aux formulaires et aux utilitaires permettent de séparer clairement les différentes fonctionnalités. Les blueprints servent à structurer l’application de manière modulaire, par exemple pour la gestion des utilisateurs ou pour un blog.
Les bonnes pratiques recommandent également de stocker les valeurs de configuration sensibles, comme les URL de bases de données ou les clés secrètes, dans un fichier config.py séparé ou via des variables d’environnement. Une journalisation continue aide à identifier rapidement les erreurs et à mieux comprendre le comportement de l’application. L’utilisation d’environnements virtuels est aussi conseillée afin de gérer proprement les dépendances. Enfin, la gestion des versions avec Git fait partie des pratiques standard pour assurer la traçabilité des modifications.
- Templates professionnels
- Modification du design en un clic
- Domaine, SSL et email
Sécurité et tests dans Flask
La sécurité et les tests ne sont pas de simples options, mais des composantes essentielles d’une application Flask professionnelle. Ils ne devraient donc être négligés dans aucun tutoriel Flask. En accordant dès le départ une attention particulière au chiffrement, à la validation des entrées, aux configurations sécurisées et aux tests automatisés, il est possible de développer des applications Web stables et fiables, qui pourront ensuite être étendues sans difficulté.
Sécurité dans Flask
En raison de la structure minimaliste de Flask, la responsabilité de la sécurité de l’application incombe aux développeurs. Une protection de base réside dans l’utilisation de la protection CSRF pour les formulaires, notamment lors des saisies utilisateur. À cet effet, l’extension Flask-WTF propose des mécanismes éprouvés.
Les mots de passe ne doivent jamais être stockés en clair, mais toujours chiffrés ou hachés.. À cet effet, les bibliothèques werkzeug.security ou bcrypt sont adaptées. La validation des entrées est tout aussi cruciale pour prévenir les injections SQL, les attaques XSS ou d’autres types de manipulations.
Pour les sessions et les cookies, il est important de définir les indicateurs HttpOnly et Secure pour protéger les données sensibles. Les configurations sensibles, telles que les URL de bases de données ou les clés API, doivent être gérées via des variables d’environnement ou des fichiers de configuration séparés, plutôt que d’être directement incluses dans le code.
Tests dans Flask
Comme dans toute application logicielle, les tests dans Flask sont indispensables pour assurer la stabilité de l’application. Les tests unitaires servent à vérifier séparément des fonctions individuelles, tandis que les tests d’intégration évaluent l’interaction entre plusieurs composants.
Flask met à disposition un client de test intégré qui permet de simuler des requêtes HTTP sans démarrer réellement le serveur. Il devient ainsi possible de tester automatiquement les routes, les templates et les points de terminaison API. La rédaction régulière de cas de test est particulièrement importante, notamment lors de l’ajout de nouvelles fonctionnalités, afin d’éviter les régressions. Combinée à l’Intégration Continue, cette approche contribue à maintenir la fiabilité de l’application, même en cas d’évolutions fréquentes.

