Comment développer une extension Flask et rendre son projet web Python plus fun

Hello! Si vous utilisez le framework Flask pour vos projets web en Python, cet article pourrait très bien vous être utile. En effet, je vous explique comment développer une extension Flask.



Tout d'abord, c'est quoi une extension?

Tous les frameworks connaissent des extensions ou plugins. Il s'agit en effet de packages ou librairies qui viennent se greffer à votre application pour en ajouter des fonctionnalités qui n'y existent pas par défaut. L'un des exemples que je pourrais vous proposer est le cas des extensions Chrome. Nous les utilisons tous sur nos navigateurs. Chacun d'entre nous a peut-être déjà installé une extension qui permet de faire des captures d'écran à partir de son navigateur. Vous noterez aussi que les frameworks populaires comme  Laravel et Django possèdent aussi leurs magasins d'extensions. Vous pouvez utilisez GeoDjango pour ajouter un système de cartographie à votre application, Laravel Notify pour afficher des notifications dans votre application.

Du coup, Flask n'est pas en reste


Flask est un microframework c'est-à-dire qu'il vient avec le stricte minimum dont votre application web aura besoin. Il s'agit entre autres d'un système de routage et d'un système de gestion de template. Un tel framework ne vient pas par défaut avec un système d'authentification ou un système de gestion d'utilisateurs. 

Armin Ronacher lorsqu'il a développé ce framework en 2010 c'était fixé l'objectif de mettre sur pied un framework simple qui ne tiendrais que sur un seul fichier. Le développeur serais alors libre d'en faire ce qu'il veut et d'y ajouter ce qu'il veut, sans aucune contrainte à travers des extensions.

Aujourd'hui, Flask tout comme les autres frameworks a un large éventail d'extensions parmi lesquelles:
  1. Flask-SQLAlchemy pour connecter l'ORM SQLAlchemy et les BD SQL à votre application
  2. Flask-Login pour la gestion des authentifications
  3. Flask-Admin pour faciliter le développement des interfaces administrateurs
  4. Flask-Mail pour l'envoi des mails via SMTP
  5. Flask-WTF pour la gestion des formulaires et le chargement des fichiers
En utilisant les extensions, vous multipliez votre productivité par 10 et contrôler les éléments qui constituent votre application. Elle n'est pas belle la vie?

Vous pouvez vous aussi créer vos propres extensions et éviter de recréer la roue d'un projet à l'autre. Imaginez un peu: vous travaillez sur un projet e-commerce avec Flask. Vous développez une extension pour le paiement par mobile money, puis une autre pour la page produit, une autre pour le blog. Lorsque vous gagnez un second client, tout ce que vous aurez à faire sera de réutiliser ces extensions et d'y ajouter quelques fonctionnalités à cette dernière en fonction des besoins de ce client. Vous pourrez aussi faciliter leur maintenance dans le temps et gagnez hautement en terme de productivité. Vous aurez ainsi mis sur pied un système modulaire qui pourra s'adapter à différents types d'architectures.

Comment développer une extension Flask?

1. Comment se présente une extension Flask?


Je vous présente d'abord cette capture:

Cette capture est l'illustration parfaite de l’architecture d'une extension Flask. Elle est constituée de 2  fichiers principaux:
  1. setup.py: il s'agit du fichier de configuration qui est utilisé pour installer votre extension.
  2. __init__.py: le fichier d'initialisation de l'extension qui peut aussi contenir toute sa logique.
Les autres fichiers et dossiers sont justes là pour vous permettre de respecter quelques standards de développements, par exemple le modèle MVC.

2. Ce que vous devez absolument savoir lorsque vous mettez en place votre extension


  1. L'extension Flask est toujours mis dans un dossier appelé Flask-NomExtension ou NomExtension-Flask
  2. Ce dossier doit contenir votre extension proprement dite qui sera nommée flask_nom_extension
  3. Votre extension doit être publiée sous une licence permissive (BSD ou MIT)

3. Un peu de pratique: développons Flask-Simple ensemble!


Il s'agit d'une simple extension qui affiche une petite phrase, un truc assez simple pour vous permettre de comprendre ce que j'explique

D'abord notre setup.py 



Dans ce fichier on définit le nom de l'application, sa version, ses dépendances etc... 

Ensuite notre __init__.py

Il s'agit du contenu de notre extension proprement dite. On peut l'organiser de telle sorte qu'on puisse appeler des objets à partir des modèles (dossier models) et afficher les vues à partir du dossier views.


  1. Tout d'abord je commence par importer la classe Blueprint: from flask import Blueprint. La classe Blueprint de Flask est un objet qui permet d'avoir des applications modulaires. En effet, chaque Blueprint a ses propres modèles, ses propres vues et ses propres routes.
  2. Ensuite, je définis la classe Simple qui contiendra la logique de mon extension
  3. Dans la méthode __init__() j’instancie mon extension à travers la méthode init_app(). init_app() va permettre d'enregistrer mon Blueprint à travers la méthode register()
  4. Dans la méthode register(), j'initialise mon Blueprint et utilise la fonction add_url_rule() qui prend en paramètre la route et la fonction qui sera exécutée lorsque cette route est appelée.
On peut maintenant obtenir une extension Flask qui affiche Hello <name> lorsque j'accède à la route '/hello/<name>'. Par exemple, '/hello/nasser' affichera Hello nasser

Vous pouvez accéder au code entier de cette petite extension sur github à l'adresse https://github.com/abdounasser202/Flask-Simple 

Je vous propose également de lire la documentation officielle sur le développement des extensions ici: https://flask.palletsprojects.com/en/1.1.x/extensiondev/

Conclusion

Ça fait plusieurs années que je développe souvent avec Flask et lorsque j'ai découvert Odoo, j'ai été ébloui par sa modularité parce que sur Odoo, il y'a un module pour tout, on peut hériter et modifier tous ce qu'on veut. Alors je me suis dit: pourquoi ne pas utiliser la même logique sur Flask en exploitant la puissance des Bluerpints? C'est alors que j'ai commencé à me documenter dans le but de comprendre comment cela fonctionne et je vous assure que cet article de Bruno Rocha m'a été d'une grande aide. C'est alors que j'ai décidé de partager avec vous le peu que j'ai appris.

Si vous avez des remarques et suggestions, les commentaires sont ouverts!

Commentaires

  1. Bon comme article.
    Sur le plan technique c'est good.
    Il ya des coquilles d'orthographe là qui t'ont échappé.
    A part ça Good!!!

    RépondreSupprimer

Publier un commentaire

Posts les plus consultés de ce blog

Apprendre python: par où commencer?

[PARTIE 1/3] Comment se trouver un emploi vite fait bien fait avec un diplôme en informatique?

Présentation d'un module Odoo de gestion de bibliothèque: comment développer un tel module?