Si vous utilisez le langage Python, vous connaissez forcément les deux plus importants frameworks de cette techno : Django et Flask. Tous deux servent au développement web, sont très utilisés mais sont très différents.
Alors, comment fonctionnent-ils ? Quel framework Python utiliser pour quel type de projet ? Nous allons tenter de répondre à ces questions dans cet article !
Le framework Flask : C’est quoi ?
Flask est un framework de développement web créé en 2010. Il serait né d’un poisson d’Avril (un framework Python contenu dans un seul fichier) devenu sérieux.
Flask est classé parmi les micro-frameworks parce qu’il ne requiert aucun autre outil ou bibliothèque.
En effet, la légèreté de Flask est sa première caractéristique : il n’intègre ni système d’authentification, ni couche d’abstraction de base de données, ni d’outil de validation de formulaire. Bien sûr, tous ces services sont disponibles grâce à des librairies tierces.
Flask compte en janvier 2022 presque 58k stars et plus de 600 contributeurs sur son GitHub.
Les fonctionnalités de Flask
Voyons ce qui caractérise principalement ce microframework web :
- Facilement déployable en production ;
- API claires et bien définies ;
- Documentation bien fournie ;
- Gestion des cookies dans des sessions côté client ;
- Basé sur la bibliothèque d’outils Werkzeug ;
- Utilise Ninja2 comme outil de templating ;
- Support intégré pour les tests unitaires.
Ses avantages et inconvénients
Pour pouvoir être complet et comparer les deux technologies, voyons les avantages et inconvénients de ce micro framework.
Les avantages à l’utilisation de Flask
Flask présente certains avantages, notamment dûs à la flexibilité de son statut de micro-framework :
- Simple à utiliser pour les cas d’utilisation basiques ;
- Le framework en lui-même est plutôt léger ;
- Il est facile de construire des prototypes (ou des PoC – proof of concept) rapidement ;
- Routing simplifié ;
- Il est facile de maintenir les petites applications Flask.
Les inconvénients de Flask
Mais c’est aussi sa simplicité qui fait ses faiblesses :
- Coûts de maintenance plus élevés sur des plus gros projets ;
- Ne prend pas en charge d’ORM ;
- Créer et maintenir proprement un gros projet Flask requiert de l’expérience sur la techno ;
- La communauté – et donc l’entraide – est un peu plus faible qu’avec Django.
Le framework Django : Qu’est-ce que c’est ?
Django est lui aussi un framework de développement web Python. Plus ancien que son concurrent, Django a lui été créé en 2005.
Django n’est pas un micro-framework ; il est bien plus complet que Flask et vient avec un ensemble d’outils, en plus d’obliger le développeur à suivre une architecture plus spécifique. Comme on le verra, c’est ce qui fait à la fois sa force et sa faiblesse.
Django compte en janvier 2022 presque 62k stars et plus de 2000 contributeurs sur son GitHub.
Les fonctionnalités de Django
Quant à Django, voici ses caractéristiques princpales :
- Possède une architecture Modèle-Vue-Contrôleur (voir notre article sur le pattern MVC) ;
- Support multi-langues ;
- Prend en charge nativement le support des base de données (relationnelles uniquement) ;
- Vient avec un ensemble de bibliothèques déjà écrites ;
- Optimisation sur des serveurs spécialisés.
Ses avantages et inconvénients
Les avantages à l’utilisation de Django
Voyons maintenant les avantages qu’il y a à utiliser le framework Django. Ceux-ci sont notamment dûs au fait que ce framework est plus complet que Flask :
- Facile à paramétrer et mettre en place ;
- Met à disposition une interface d’administration nativement ;
- Support de protocoles d’authentifications, intègre son propre système d’authentification ;
- Vient avec plusieurs niveaux de cache ;
- Possède un ensemble d’outils natifs pour aider au développement.
Les inconvénients de Django
S’il a certains avantages appréciés, Django a aussi des inconvénients :
- Dépendant de son propre ORM (qui ne supporte que des SGBD relationnels) ;
- Peut ajouter de la complexité inutile pour les petits projets ;
- Courbe d’apprentissage assez importante (plus qu’avec Flask).
Flask VS Django : quel est le meilleur framework Python ?
Maintenant qu’on a une vision globale sur ces deux frameworks web, comparons les sur des points très spécifiques : les performances, la gestion des base de données, le routage, la taille des projets et la sécurité.
Ces éléments nous donneront des pistes plus concrètes pour décider du meilleur framework Python à adopter, en fonction de la situation et de ce que requiert le projet que vous allez commencer.
Les performances
Au niveau des performances, Flask aura un léger avantage. Du fait de sa légèreté, il surpassera Django (qui vient avec un ensemble de bibliothèques), surtout dans les petits projets. Cette différence de performance n’est pas non plus significative.
Les bases de données
Django vient avec son ORM (Object Relational Mapping), lui permettant une gestion native et facilitée des base de données. Cependant, il ne gère de cette façon que les SGBD relationnels (parmi eux MySQL, Oracle ou PostgreSQL). Flask lui demande qu’on lui connecte un ORM externe si le besoin est là (par exemple SQLAlchemy). Il offre là, bien que le support de la base de données ne soit pas natif, plus de flexibilité puisqu’il permettra de facilement prendre en charge des bases NoSQL.
Voir aussi notre article sur les différences entre les bases de données SQL et NoSQL.
Le routage
Le routage est géré différemment par Django et Flask. Django définit explicitement les URL et les vues dans des fichiers spécifiques (urls.py et views.py). Quand une requête correspond à une URL définie, l’objet de la requête (qui contient les informations de la requête HTTP) est envoyée à une vue qui est ensuite invoquée. Si on veut accéder à cet objet, il faut explicitement l’envoyer.
Flask, qui, on l’a dit, est basé sur l’outil Werkzeug, possède une gestion du routing différente. L’objet requête est global, et peut donc être accessible plus facilement, à la seule condition de l’importer.
L’envergure du projet
Du fait des différences de taille et de flexibilité entre les deux frameworks, ils ne sont pas forcément tous deux adaptés pour les mêmes types de projets. Flask sera idéal sur un projet simple, un proof of concept ou un projet qui n’est pas forcément amené à évoluer régulièrement.
De son côté, Django sera plus dans son élément pour un gros projet, sur lequel une équipe complète travaille, qui aura des besoins évolutifs et sur le long terme.
La sécurité
La sécurité est un point important lorsqu’on parle de développement web, et surtout côté backend. Django a, parmi tous les outils avec lesquels il vient, un système intégré de protection contre de nombreux types d’attaques, comme le Cross-Site Request Forgery (CSRF), le Cross-Site Scripting (XSS) ou l’injection SQL.
L’autre avantage de Django, c’est qu’il ne repose pas sur des librairies externes, son système de protection inclut donc tout ce avec quoi il vient (authentification, ORM, etc.).
Si Flask, du fait de sa simplicité, peut paraître plus facile à sécuriser, sa faille et qu’il doit se reposer sur des bibliothèques externes à chaque fonctionnalité supplémentaire : authentification, gestion de la base de données, etc. Ce qui veut dire que les risques avec Flask ne se trouvent pas dans Flask, mais plutôt dans ses dépendances, sur lesquelles seuls les développeurs de ces bibliothèques ont la main.
L’apprentissage
Pour finir le comparatif, parlons un peu de l’apprentissage de ces technos. On l’a assez répété, Flask est un framework plus simple et flexible que son concurrent Django. Il parait donc évident que la courbe d’apprentissage de ce framework est bien plus douce que celle de Django.
C’est pour cette raison qu’il est conseillé de choisir Flask en premier lorsqu’on veut se mettre à un framework web Python.
Même si vous développez déjà sous Python (mais sans faire de web), commencer par Flask sera plus simple.
Puis, une fois ce framework maîtrisé, si le besoin s’en fait sentir, passer sous Django.
Django VS Flask : Le verdict
Alors, Flask ou Django, quel framework choisir ? Il n’y a pas de bonne réponse à cette question. Comme pour la plupart des choix techniques que l’on fait, la solution répond à un besoin, et chaque projet a des besoins différents.
Ainsi, si vous voulez construire un POC basé sur un serveur très simple, Flask fera très bien l’affaire.
En revanche, si vous entamez le développement d’un gros projet, avec des évolutions prévues sur des années, avec une équipe complète, Django peut sembler être une meilleure solution.
Bien sûr, c’est aussi une question d’appétence ; peut-être avez-vous envie d’essayer un framework plus que l’autre.
Quoi qu’il en soit, il n’y a pas un framework meilleur que l’autre, tout est une question de besoins.
Et vous, avez-vous déjà dû utiliser l’un ou l’autre ? Entre Flask et Django, quel a été votre choix ? Lequel choisiriez-vous aujourd’hui ? Dites-le nous en commentaire !