Flask, un framework simple et accessible

17 avril 2025 02:07 dans audit-et-conseils / publications

Flask est un framework de serveur d’application WSGI qui a maintenant sa place dans l’industrie du web depuis plusieurs années après avoir prouvé l’efficacité de son concept minimaliste.

Slider Image

Le concept de Flask est de fournir un socle minimal efficient en laissant la main aux développeurs pour assembler les briques fondamentales, c’est pourquoi il se catégorise lui même comme un microframework.

De fait son intérêt est qu’il est peu opiniâtre, plus accessible et nécessite peu de ressources.

Fonctionnalités intégrées

Si Flask prône une certaine simplicité il ne laisse pas pour autant le développeur dénué d’outils pour construire un projet et on peut dénombrer plusieurs fonctionnalités intégrées qui sont disponibles nativement:

  • Un serveur de développement;
  • La gestion des mécanismes des requêtes et réponses HTTP;
  • Le système de gestion des routes avec une approche fonctionnelle ou bien avec une approche plus élaborée autour des Class based views;
  • La gestion intégrée des templates avec Jinja2;
  • Des sessions pour un client HTTP;
  • Une gestion de configuration de projet;
  • Un logging interne à l’application;
  • Des notifications par message interne;
  • Un système de signal applicatif;
  • Une gestion des fichiers statiques (images, CSS, JavaScript, etc..);
  • Un système d’organisation (nommé Blueprints) pour structurer les différentes parties d’un projet de moyenne ou grande envergure;
  • Support des tâches asynchrones;
  • Un client HTTP dédié au contexte de tests unitaires;
  • Quelques commandes en lignes pour gérer et exécuter le projet.

La plupart de ces fonctionnalités sont optionnelles et quasiment indépendantes de sorte qu’un développeur peut piocher dedans selon les besoins du projet.

On remarque donc que si le concept initial était le minimalisme, Flask a su évoluer au fil des années pour apporter quelques fonctionnalités que ses développeurs ont reconnues comme essentielles.

Pour autant il reste fidèle à son concept et n’inclut aucune application native mais seulement des briques de conception d’application.

Tour rapide

HTTP

Pour publier un document on déclare une route qui définit un chemin d’URL (tel que /ma-page/) sur le serveur, elle pourra donc être l’objet d’une requête HTTP et le cas échéant répondra par une réponse produite par la vue associée.

Synthétiquement le processus sera le suivant:


    requête -> route -> vue -> réponse
    

Une route peut accepter une ou plusieurs méthode HTTP et plusieurs options, elle est toujours associée à une vue qui peut être générique ou non.

Flask expose l’objet d’une requête HTTP pour accéder à ses entêtes, ses données tranportées, ses éventuels cookies et bien d’autres éléments.

La réponse HTTP est un objet spécifique que vous pouvez forger vous mêmes selon vos besoins ou simplement utiliser une réponse HTML standard intégrée par Flask.

Enfin la vue peut être une simple fonction pour générer le contenu de la réponse ou une classe d’objet Python pour implémenter des mécanismes élaborés.

Rendu HTML

Par défaut une réponse standard est en HTML mais vous pouvez définir explicitement un autre format dans vos vues.

Une configuration de Jinja sur mesure est intégrée et de fait c’est le système de modèles de documents de Flask.

Formulaire

Il n’y a pas de système de controlleur de formulaire, vous devrez gérer vous même sa mise en forme, sa validation et ses opérations. Et de fait la gestion du téléversement de fichiers est à votre charge aussi.

Vous pourrez concevoir et gérer vos formulaires avec l’objet de la requête qu’expose Flask dans les vues ainsi qu’avec le système de parser de données de Werkzeug (une librairie déjà installée par Flask).

Vous pouvez aussi vous aider de l’extension Flask-WTF qui permet de modéliser des formulaires pour les gérer d’une façon plus générique.

Base de données

Vous avez dû remarquer que dans la liste de fonctionnalités il n’y a pas de système de gestion de base de données intégré à Flask.

Cependant une bases de donnée est un service courant dans un projet et de nombreux développeurs l’intégrent donc soit eux-mêmes directement avec un SGBD soit avec un ORM comme SQLAlchemy.

Il existe plusieurs extensions pour simplifier leur intégration mais à notre époque il est recommandé de choisir une extension avec un ORM incluant une gestion efficace et accessible des migrations de schémas et données.

Fichiers statiques

Il n’y a pas de système dédié à proprement parlé car Flask considère à juste titre que votre serveur HTTP devra configurer comment les servir mais cependant dans le cadre du serveur de dévelopement vous pouvez configurer une route dédiée pour servir des fichiers statiques depuis un répertoire.

Tests unitaires

Flask dispose de tout le nécessaire pour créer des tests unitaires autour de ses mécanismes intégrées.

Écosystème d’extensions

La base restreinte de composants intégrés ne couvre pas la diversité des besoins finaux d’un projet moderne et au fil du temps la communauté de Flask a créé de nombreux packages tiers qui sont qualifiés d’extensions.

Si votre projet nécessite certaines fonctionnalités courantes comme l’authentification, une base de données, un ORM, gestion de formulaires, intégration de Bootstrap, l’envoi d’email, etc.. vous pourrez trouver une extension dans Awesome Flask qui est une liste soigneusement séléctionnée d’extensions populaires.

Création d’un projet basique

Basiquement un projet avec Flask nécessite de définir au moins une route qui décrit un chemin d’URL à prendre en charge pour y produire une réponse.

Par exemple:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1>Hello, World!</h1>"

C’est un exemple très sommaire pour les besoins de la démonstration qui ne renvoie pas une vrai page HTML mais seulement une réponse de type HTML contenant uniquement <h1>Hello,World!</h1>.

Cet exemple de script est à sauvegarder dans un fichier hello.py puis à exécuter avec la commande suivante:


    flask --app hello run
    

Et une instance d’un serveur HTTP sera démarrée et répondra sur http://127.0.0.1:5000.

Tout ceci démontre qu’il n’y a pas de structure de fichiers et répertoires requis pour un projet et qu’il peut potentiellement résider dans un seul et unique fichier de script.

Cet exemple est tiré de la documentation d’introduction rapide à Flask.

Cas d’usages typiques

Débuter dans le développement d’une application web

L’accessibilité de Flask permettra à un développeur Python de produire rapidement un service web minimal.

Vous pourrez rapidement publier et déployer quelques pages web basiques ou une API sommaire, puis progresser.

Micro-service et périphérique embarqué

De par sa faible empreinte en ressources Flask est très efficace pour créer un ou plusieurs services d’une plateforme d’architecture micro-services ou à destination d’un périphérique embarqué.

Alternatives

D’autres solutions de serveurs applicatifs légers en Python existent dont on peut démarquer:

  • CherryPy qu’on peut probablement considérer comme l’ancêtre de Flask mais qui a souhaité rester plus simple et intégrer moins de fonctionnalités;
  • FastAPI qui un peu plus qu’un simple serveur applicatif puisqu’il est dédié à concevoir des API et qui dans ce contexte peut souvent être envisagé à la place de Flask comme une solution plus efficiente;
  • Starlette est un serveur applicatif moderne vraiment proche de Flask et naturellement asynchrone mais néanmoins pas encore au même niveau de finition.

Conclusion

Flask est souvent comparé à Django dans le domaine des serveurs applicatifs en Python. Cependant ces deux serveurs divergent sur leur envergure. Django vous propose par défaut un project complet avec quelques applications qu’il considère essentielles alors que Flask considère qu’il est de votre ressort de mettre en place toute les applications selon vos propres critères.

Flask est donc fait pour vous si vous êtes un développeur Python sans maîtrise d’un autre framework web, si vous devez produire un serveur vraiment efficient ou prévoyez un projet réellement simple n’ayant pas vocation à s’élargir.

En revanche si vous pensez que votre projet évoluera en envergure, que vous envisagez plusieurs fonctionnalités avancées, que vous souhaitez intégrer des applications évoluées (CMS, Blog, etc..) ou que vous prévoyez un usage intensif d’une base de données vous devriez probablement envisager un autre framework plus complet et riche tel que Django.