8 excellents petits frameworks Web Python

La commodité et la polyvalence de Python signifient qu'il est utilisé pour créer des logiciels dans presque tous les domaines de la vie informatique. Un créneau majeur est celui des services Web, où la vitesse de développement de Python et les métaphores flexibles facilitent la mise en service rapide des sites Web.

Et comme vous pouvez le deviner, Python vous offre beaucoup de choix et de latitude dans les frameworks Web, petits et grands. Après tout, tous les projets Web ne doivent pas nécessairement être à l'échelle de l'entreprise. La plupart devraient être juste assez grandes pour faire le travail, et pas plus grandes. Cet article examine huit des frameworks Python les plus connus qui mettent l'accent sur la simplicité, la livraison légère et une concentration étroite.

Bouteille

La bouteille pourrait être considérée comme une sorte de mini-flacon, car elle est encore plus compacte et succincte que cet autre «microframework». En raison de son encombrement minimal, Bottle est idéal pour être inclus dans d'autres projets ou pour livrer rapidement de petits projets tels que les API REST. (Le flacon est discuté ci-dessous.) 

L'ensemble de la base de code de Bottle tient dans un seul fichier et n'a absolument aucune dépendance externe. Malgré tout, Bottle est équipé de suffisamment de fonctionnalités pour créer des types d'applications Web courants sans compter sur une aide extérieure.

Le système de routage de Bottle, qui mappe les URL aux fonctions, a presque exactement la même syntaxe que Flask. Vous n'êtes pas limité non plus à un ensemble de chemins câblés; vous pouvez les créer dynamiquement. Les données de demande et de réponse, les cookies, les variables de requête, les données de formulaire d'une action POST, les en-têtes HTTP et les téléchargements de fichiers sont tous accessibles et manipulés au moyen d'objets dans Bottle.

Chaque capacité a été mise en œuvre avec une grande attention aux détails. Avec les téléchargements de fichiers, par exemple, vous n'avez pas besoin de renommer le fichier si sa convention de dénomination entre en conflit avec le système de fichiers cible (comme les barres obliques dans le nom sous Windows). Bottle peut le faire pour vous.

Bottle comprend son propre moteur de création de modèles HTML simple. Encore une fois, bien que minimal, le moteur de création de modèles possède tous les éléments essentiels. Les variables incluses dans un modèle sont rendues avec du HTML sécurisé par défaut; vous devez indiquer quelles variables peuvent être reproduites en toute sécurité. Si vous préférez remplacer le moteur de modèle de Bottle par un autre, tel que Jinja2, Bottle vous permet de le faire sans problème. Je préfère le système de modèle simple fourni avec Bottle; il est rapide, sa syntaxe est sans prétention et vous permet de mélanger le code et le modèle de texte sans difficulté excessive.

Bottle prend même en charge plusieurs back-ends de serveurs. Il est livré avec son propre miniserver intégré pour des tests rapides, mais prend également en charge WSGI générique, une grande variété de serveurs HTTP compatibles WSGI et un ancien CGI si nécessaire.

Bottle n'a pas besoin d'autant de documentation que les autres frameworks, mais les documents ne sont en aucun cas maigres. Tous les éléments cruciaux tiennent sur une seule (quoique longue) page Web. Au-delà de cela, vous trouverez une documentation complète pour chaque API, des exemples de déploiement sur diverses infrastructures, une explication du langage de création de modèles intégré et un grand nombre de recettes courantes.

Comme avec Flask, vous pouvez développer les fonctionnalités de Bottle manuellement ou via des plug-ins. Les plug-ins Bottle sont loin d'être aussi nombreux que ceux de Flask, mais il existe des éléments utiles, tels que l'intégration avec diverses couches de base de données et l'authentification de base des utilisateurs. Pour la prise en charge asynchrone, Bottle peut utiliser l'un des adaptateurs serveur existants qui s'exécute de manière asynchrone, comme aiohttp / uvloop, mais async/awaitn'est pas pris en charge en mode natif.

Une conséquence du minimalisme de Bottle est que certains éléments ne sont tout simplement pas là. La validation de formulaire, y compris des fonctionnalités telles que la protection CSRF (cross-site request forgery), n'est pas incluse. Si vous souhaitez créer une application Web prenant en charge un degré élevé d'interaction utilisateur, vous devrez ajouter cette prise en charge vous-même.

Un autre problème avec Bottle est que le développement est au point mort; la dernière version ponctuelle, 0.12, est arrivée en 2013. Cela dit, Bottle continue d'être maintenue et ses versions de développement restent utilisables pour la production. Les développeurs ont l'intention de fournir de nouvelles versions qui éliminent la prise en charge des éditions héritées de Python.

CherryPy

CherryPy existe sous une forme ou une autre depuis près de 20 ans, mais n'a pas perdu le minimalisme et l'élégance qui la distinguaient depuis le début.

L'objectif derrière CherryPy, en plus de ne contenir que les éléments nécessaires pour servir les pages Web, est de se sentir, dans la mesure du possible, non pas comme un «framework Web» mais comme n'importe quel autre type d'application Python. Des sites comme Hulu et Netflix ont utilisé CherryPy en production parce que le framework fournit une base très discrète sur laquelle s'appuyer. CherryPy utilise des threads regroupés sous le capot, pour mieux prendre en charge les adaptateurs de serveur multithread.

CherryPy vous permet de séparer votre application Web de la logique de base. Pour mapper les fonctions de votre application sur des URL ou des routes servies par CherryPy, vous créez une classe dans laquelle les espaces de noms des objets mappent directement aux URL que vous souhaitez servir. Par exemple, la racine du site Web est fournie par une fonction nommée «index». Les paramètres passés à ces fonctions sont utilisés pour gérer les variables fournies par les méthodes GET ou POST.

Les bits inclus dans CherryPy sont destinés à fonctionner comme des blocs de construction de bas niveau. Les identificateurs de session et la gestion des cookies sont inclus, mais la création de modèles HTML ne l'est pas. Comme Bottle, CherryPy offre un moyen de mapper des itinéraires vers des répertoires sur le disque pour le service de fichiers statiques.

CherryPy s'en remettra souvent à une bibliothèque tierce existante pour prendre en charge une fonctionnalité plutôt que de la fournir de manière native. Les applications WebSocket, par exemple, ne sont pas prises en charge directement par CherryPy, mais via la bibliothèque ws4py.

La documentation de CherryPy comprend un didacticiel pratique des différents aspects du programme. Cela ne vous mènera pas à travers une application complète de bout en bout, contrairement à certains autres tutoriels de framework, mais c'est toujours utile. Les documents sont accompagnés de notes pratiques sur le déploiement dans des hôtes virtuels, le proxy inverse via Apache et Nginx et de nombreux autres scénarios.

Faucon

Si vous créez des API basées sur REST et rien d'autre, Falcon a été fait pour vous. Lean et rapide, avec presque aucune dépendance au-delà de la bibliothèque standard, Falcon fournit tout ce dont vous avez besoin pour les API REST et rien de plus. Falcon 2.0, sorti en 2019, supprime le support de Python 2.x et nécessite au moins Python 3.5.

Une grande partie des raisons pour lesquelles Falcon obtient le label «léger et élancé» n'a pas grand-chose à voir avec le nombre de lignes de code dans le framework. C'est parce que Falcon n'impose pratiquement aucune structure propre aux applications. Tout ce qu'une application Falcon a à faire est d'indiquer quelles fonctions correspondent à quels points de terminaison d'API. Le retour de JSON à partir d'un point de terminaison implique un peu plus que la configuration d'une route et le retour des données via la json.dumpsfonction de la bibliothèque standard de Python. Le support pour async n'a pas encore atterri dans Falcon, mais des travaux sont en cours pour que cela se produise dans Falcon 3.0.

Falcon utilise également des valeurs par défaut prêtes à l'emploi, de sorte que peu de bricolage est nécessaire pour la configuration. Par exemple, les 404 sont déclenchés par défaut pour toute route qui n'est pas explicitement déclarée. Si vous souhaitez renvoyer des erreurs au client, vous pouvez lever l'une des nombreuses exceptions de stock fournies avec le framework (par exemple HTTPBadRequest) ou utiliser une falcon.HTTPErrorexception générique . Si vous avez besoin d'un prétraitement ou d'un post-traitement pour une route, Falcon fournit également des hooks pour ceux-ci.

L'accent mis par Falcon sur les API signifie qu'il y a peu ici pour créer des applications Web avec des interfaces utilisateur HTML classiques. Ne vous attendez pas à grand-chose en termes de fonctions de traitement de formulaires et d'outils de protection CSRF, par exemple. Cela dit, Falcon propose des options élégantes pour étendre ses fonctionnalités, afin de pouvoir créer des éléments plus sophistiqués. Outre le mécanisme d'accrochage mentionné ci-dessus, vous trouverez une interface pour créer un middleware qui peut être utilisée pour envelopper toutes les API de Falcon.

La documentation de Falcon est mince par rapport à d'autres frameworks, mais uniquement parce qu'il y a moins à couvrir. Le guide de l'utilisateur comprend une procédure pas à pas formelle de toutes les fonctionnalités principales, ainsi qu'une section de démarrage rapide qui vous permet d'afficher un exemple de code avec ou sans annotation.

FastAPI

Le nom de FastAPI est un bon résumé de ce qu'il fait. Il est conçu pour créer rapidement des points de terminaison d'API, et il fonctionne également rapidement.

FastAPI utilise le projet Starlette pour son cœur de réseau haut débit, mais vous n'avez pas besoin de connaître les composants internes de Starlette pour utiliser FastAPI. Vous définissez les points de terminaison de la même manière qu'une application Flask ou Bottle (utilisez des décorateurs pour indiquer quelles fonctions gèrent les itinéraires), puis retournez des dictionnaires qui sont automatiquement traduits en JSON.

Vous pouvez facilement remplacer la façon dont les choses sont renvoyées. Par exemple, si vous souhaitez renvoyer du HTML / XML à partir de certains points de terminaison, vous pouvez le faire en renvoyant simplement un Responseobjet personnalisé . Si vous souhaitez ajouter un middleware personnalisé, vous pouvez insérer tout ce qui suit la norme ASGI. 

FastAPI utilise l'indication de type de Python pour fournir des contraintes sur les types de données acceptés par les routes. Par exemple, si vous avez une route avec le type Optional[int], FastAPI rejettera toutes les soumissions sauf les entiers. Vous n'avez pas à ajouter de code de validation de données à vos points de terminaison; vous pouvez simplement utiliser des indices de type et laisser FastAPI faire le travail.

Naturellement, certaines choses sont laissées de côté. Il n'y a pas de moteur de modèle HTML natif, par exemple, mais les solutions tierces ne manquent pas pour combler cette lacune. Idem pour la connectivité de la base de données, mais la documentation contient des détails sur la façon d'amener certains ORM (par exemple Peewee) à travailler avec les comportements asynchrones de FastAPI.

Ballon

De nombreuses discussions sur les frameworks Web Python commencent par Flask, et pour une bonne raison. Flask est un framework bien établi, bien compris, facile à utiliser et assez stable. Il est pratiquement impossible de se tromper en utilisant Flask pour un projet Web léger ou une API REST de base, mais vous serez confronté à de lourdes difficultés si vous essayez de créer quelque chose de plus grand.

L'attrait central de Flask est sa faible barrière à l'entrée. Une application de base «hello world» peut être configurée en moins de 10 lignes de Python. Flask inclut un système de modèles HTML largement utilisé, Jinja2, pour rendre le texte facile, mais Jinja2 peut être remplacé par n'importe quel nombre d'autres moteurs de modèles (tels que Moustache) ou vous pouvez créer le vôtre.

Au nom de la simplicité, Flask omet les subtilités telles qu'une couche de données ou ORM, et ne propose aucune disposition pour la validation de formulaire. Cependant, Flask peut être étendu grâce à des extensions, dont il existe des dizaines, couvrant de nombreux cas d'utilisation courants tels que la mise en cache, la gestion et la validation de formulaires et la connectivité aux bases de données. Cette conception simplifiée par défaut vous permet de commencer à concevoir une application Flask avec le minimum absolu de fonctionnalités, puis de superposer uniquement les éléments dont vous avez besoin lorsque vous en avez besoin.

La documentation de Flask est géniale et facile à lire. Le document de démarrage rapide fait un excellent travail pour vous aider à démarrer tout en expliquant la signification des choix par défaut pour une application Flask simple, et les documents de l'API regorgent de bons exemples. La collection d'extraits de code Flash est également excellente, qui sont des exemples rapides et sales de la façon d'accomplir des tâches spécifiques, telles que la façon de renvoyer un objet s'il existe ou une erreur 404 si ce n'est pas le cas.

Flask a atteint son jalon 1.0 en 2018, avec Python 2.6 et Python 3.3 étant les versions minimales prises en charge, et avec beaucoup de ses comportements finalement gravés dans la pierre. Flask ne prend pas explicitement en charge la syntaxe asynchrone de Python, mais une variante compatible API de Flask appelée Quart a été créée pour satisfaire cette demande.

Pyramide

Petit et léger, Pyramid est bien adapté à des tâches telles que l'exposition du code Python existant en tant qu'API REST ou la fourniture du noyau d'un projet Web où le développeur effectue la plupart des tâches lourdes.

«Pyramid vous permettra de devenir rapidement productif et grandira avec vous», indique la documentation. "Cela ne vous empêchera pas lorsque votre application est petite, et cela ne vous gênera pas lorsque votre application deviendra grande."

Une bonne façon de décrire le minimalisme de Pyramid serait «sans politique», un terme utilisé dans la section de la documentation qui traite de la façon dont Pyramid se forme par rapport à d'autres frameworks Web. Fondamentalement, «sans politique» signifie que la base de données ou le langage de création de modèles que vous choisissez d'utiliser n'est pas la préoccupation de Pyramid.

Très peu de travail est nécessaire pour créer une application Pyramid de base. Comme avec Bottle et Flask, une application Pyramid peut être constituée d'un seul fichier Python, en dehors des fichiers du framework lui-même. Une API simple à une seule route ne nécessite pas plus d'une douzaine de lignes de code. La plupart de ceux-ci sont des from … importinstructions passe-partout et la configuration du serveur WSGI.

Par défaut, Pyramid comprend plusieurs éléments communs dans les applications Web, mais ils sont fournis en tant que composants à assembler, et non en tant que solutions à part entière. La prise en charge des sessions utilisateur, par exemple, est même fournie avec la protection CSRF. Mais la prise en charge des comptes d'utilisateurs, tels que les connexions ou la gestion des comptes, ne fait pas partie de l'accord. Vous devrez le rouler vous-même ou l'ajouter via un plug-in. Il en va de même pour la gestion des formulaires et les connexions aux bases de données.

Pyramid fournit même un moyen de créer des modèles à partir de projets Pyramid précédents pour réutiliser des travaux antérieurs. Ces modèles, appelés «échafaudages», génèrent une application Pyramid avec un routage simple et des modèles HTML / CSS de démarrage. Les échafaudages fournis incluent un exemple de projet de démarrage et un projet qui se connecte aux bases de données via la bibliothèque Python populaire SQLAlchemy.