5 grands et puissants frameworks Web Python

Lorsque vous créez un back-end pour un site Web ou un service, même modeste à première vue, vous pouvez rapidement trouver que c'est tout sauf. Même un site «simple» se révèle être une ruche de complexité. Gestion des utilisateurs, conception des données, soumission de formulaires, sécurité, - la mise en œuvre manuelle de tout cela devient fastidieuse.

Pour ces grands projets Web, lorsque vous savez que vous aurez besoin de tout, ainsi que de l'évier de cuisine, il est préférable de se tourner vers un cadre livré avec des batteries (et des chargeurs) inclus. Voici cinq frameworks Web lourds pour Python qui sont fournis avec tout ce dont vous avez besoin pour créer des applications Web robustes, etc.

CubicWeb

CubicWeb est présenté comme «un cadre d'application Web sémantique qui favorise la réutilisation et la conception orientée objet». C'est un système intrigant - comme l'a noté Rick Grehan lorsqu'il l'a revu en 2011 - qui met l'accent sur l'utilisation d'abstractions et de blocs de code réutilisables appelés «cubes». En fait, CubicWeb peut être trop abstrait ou idiosyncratique pour certains développeurs, et sa vitesse de développement et son ensemble de fonctionnalités sont à la traîne d'autres frameworks.

Les cubes sont des composants logiciels qui comportent un schéma (modèle de données), des entités (logique de programmation) et des vues. En assemblant plusieurs cubes, chacun effectuant sa propre tâche, vous pouvez composer des applications logicielles en réutilisant votre propre code et le code des autres.

À la base, CubicWeb fournit un échafaudage de base utilisé par chaque application Web: un «référentiel» pour les connexions et le stockage de données; un «moteur Web» pour les requêtes / réponses HTTP de base et les actions CRUD; et un schéma de modélisation des données. Tout cela est décrit dans les définitions de classe Python.

Pour configurer et gérer des instances de CubicWeb, vous travaillez avec un outil de ligne de commande similaire à celui utilisé pour Django. Un système de création de modèles intégré vous permet de générer une sortie HTML par programmation. Vous pouvez également utiliser un cube qui fournit des outils pour les interfaces utilisateur Web, comme celui du framework HTML Bootstrap.

Bien que CubicWeb prenne en charge Python 3 (depuis la version 3.23), il ne semble pas utiliser la fonctionnalité asynchrone native de Python 3. Une façon détournée d'inclure async serait d'utiliser le module cubicweb.pyramid pour utiliser le framework Pyramid comme serveur Web, et de dessiner sur un fork de Pyramid qui utilise des constructions asynchrones. Il est également possible d'effectuer des tâches de manière asynchrone avec le cube cubicweb-worker. Mais rien de plus simple semble hors de portée pour le moment.

Pour récupérer ou manipuler des données persistantes dans une application CubicWeb, vous utilisez le langage RQL (Relation Query Language), qui utilise une syntaxe vaguement semblable à SQL, mais qui est calquée sur SparQL du W3C. La justification de CubicWeb pour cela est, encore une fois, l'abstraction: RQL fournit une route hautement découplée pour interconnecter diverses sources de données.

Parce que CubicWeb a beaucoup de dépendances, il est préférable de les utiliser pip installpour toutes les récupérer. Vous devrez peut-être également effectuer une certaine quantité de réglages manuels sur l'environnement local. Cela contraste avec d'autres frameworks où exécuter pip installou déposer le code du framework dans un sous-dossier d'un autre projet est tout ce qui est nécessaire. Ou vous pouvez utiliser un conteneur Docker pour faire fonctionner les choses.

CubicWeb se réfère à sa longue documentation comme «le livre». Les auteurs du livre ont pris le temps d'expliquer l'approche inhabituelle de CubicWeb, de montrer comment créer des applications de base, d'inclure des références d'API et, en général, de faire tout leur possible pour être précis.

CubicWeb reste en développement actif, même s'il est lent. Les plans pour CubicWeb 4.0 ont été réfléchis depuis 2012, mais aucun calendrier n'a encore été proposé pour le livrer.

Django

Au cours de la décennie et du changement depuis l'apparition de Django, il est devenu l'un des frameworks Python les plus largement déployés pour créer des applications Web. Django est livré avec la plupart des batteries dont vous pourriez avoir besoin, ce qui le rend plus adapté à la création de grandes applications que de petites.

Django a passé de nombreuses années assis sur la version 1.x. Lorsque Django 2.0 est arrivé fin 2017, il a abandonné la compatibilité avec Python 2 au profit de Python 3.4 et plus. Django 3.0, publié en décembre 2019, nécessite Python 3.6 ou supérieur et ajoute la prise en charge de la nouvelle norme ASGI asynchrone pour les applications Web Python.

Un élément clé de l'attrait de Django est la vitesse de déploiement. Étant donné que Django comprend autant d'éléments dont vous avez besoin pour développer l'application Web moyenne, vous pouvez agir rapidement. Le routage, l'analyse d'URL, la connectivité de la base de données, y compris un ORM (object-relational mapper), la validation de formulaire, les protections contre les attaques et la création de modèles sont tous intégrés.

Vous trouverez des blocs de construction pour les scénarios d'application Web les plus courants. La gestion des utilisateurs, par exemple, se trouve sur la plupart des sites Web, donc Django la propose comme un élément standard. Au lieu d'avoir à créer votre propre système pour suivre les comptes d'utilisateurs, les sessions, les mots de passe, les connexions / déconnexions, les autorisations d'administrateur, etc., Django fournit ces fonctionnalités de manière native. Ils peuvent être utilisés tels quels ou étendus pour englober de nouveaux cas d'utilisation avec un minimum de travail.

Django a des valeurs par défaut saines et sûres qui aident à protéger votre application Web contre les attaques. Lorsque vous placez une variable dans un modèle de page, comme une chaîne avec HTML ou JavaScript, le contenu n'est pas rendu littéralement à moins que vous ne désigniez explicitement l'instance de la variable comme sûre. Cela élimine en soi de nombreux problèmes courants de script intersite. Si vous souhaitez effectuer la validation de formulaire, vous pouvez tout utiliser, de la simple protection CSRF aux mécanismes complets de validation champ par champ qui renvoient des commentaires d'erreur détaillés.

Un ensemble de fonctionnalités aussi riche et large que celui de Django ne serait pas très utile sans une documentation robuste pour l'accompagner. La documentation Django explore tous les aspects du framework sous plusieurs angles. Travailler avec Python 3 ou d'autres versions du langage, assurer la sécurité, implémenter des composants d'application Web courants (comme des sessions ou la pagination), générer des sitemaps, tout est couvert. Les API de chaque couche de l'application (modèle, vue et modèle) sont également décrites en détail.

Une grande puissance, cependant, s'accompagne d'une grande complexité. Les applications Django ont la réputation d'être extrêmement lourdes, chargées de nombreuses pièces mobiles. Même une simple application Django nécessite une bonne quantité de configuration pour fonctionner. Si votre objectif est de faire un peu plus que de configurer quelques points de terminaison REST simples, Django est presque certainement exagéré.

Django a aussi ses bizarreries. Par exemple, les modèles de page ne peuvent pas utiliser de callables. Exemple: vous pouvez passer en {{user.name}}tant que composant dans un modèle, mais pas {{user.get_name()}}. C'est l'une des façons dont Django garantit que les modèles ne vous tirent pas dans le pied par inadvertance, mais ces contraintes peuvent être discordantes si vous n'y êtes pas préparé. Bien qu'il existe des solutions de contournement, elles ont tendance à nuire aux performances.

Depuis la version 3.0, Django a ajouté la prise en charge des vues asynchrones. Malheureusement, il n'y a pas encore de support pour async dans d'autres parties de la pile Django, comme l'ORM. Mais vous pouvez déployer Django en utilisant ASGI pour tirer pleinement parti des vues asynchrones.

Web2py

Dans le monde de la programmation Ruby, Ruby on Rails est le framework web de facto. Massimo Di Pierro, professeur d'informatique à l'Université DePaul, s'est inspiré de Rails pour créer un framework Web en Python qui était tout aussi facile à configurer et à utiliser. Le résultat est Web2py.

La plus grande attraction de Web2py est son environnement de développement intégré. Lorsque vous configurez une instance de Web2py, vous disposez d'une interface Web, essentiellement un éditeur d'application Python en ligne, dans laquelle vous pouvez configurer les composants de l'application. Cela signifie généralement créer des modèles, des vues et des contrôleurs, chacun étant décrit via des modules Python ou des modèles HTML. Quelques exemples d'applications sont livrés avec Web2py prêts à l'emploi. Vous pouvez les démonter pour voir comment ils fonctionnent ou les utiliser comme modèles de démarrage pour créer vos propres applications.

Les développeurs déploient généralement Web2py en téléchargeant son code source et en s'appuyant sur cela. Mais pour les utilisateurs moins techniques sous Windows ou MacOS, les créateurs de Web2py proposent des versions qui sont essentiellement des serveurs autonomes. Téléchargez, décompressez et exécutez l'une de ces versions, et vous aurez un serveur Web local avec une copie préconfigurée de Web2py intégré. C'est un bon moyen d'avoir une longueur d'avance sur la création d'une application Web2py, qui peut ensuite être déployée ailleurs si nécessaire.

L'interface Web de Web2py a été construite avec Bootstrap 4, donc c'est facile pour les yeux et facile à naviguer. L'éditeur intégré au navigateur ne remplace pas un IDE complet, mais il est équipé d'aides utiles telles que la numérotation des lignes et la coloration syntaxique Python (y compris l'auto-indentation). Une interface Web rapide vers le shell Python est également incluse, afin que vous puissiez interagir avec Web2py à partir de la ligne de commande - une belle concession aux experts.

Le système d'abstraction de données utilisé dans Web2py fonctionne un peu différemment de l'ORM de Django et d'autres ORM inspirés par celui-ci (comme Peewee). Ces systèmes utilisent des classes Python pour définir des modèles, tandis que Web2py utilise des fonctions de constructeur comme define_tablepour instancier des modèles. Les différences ne sont susceptibles d'être discordantes que si vous êtes habitué à l'inverse; ils ne devraient pas dérouter les nouveaux arrivants. Vous n'aurez probablement aucun problème pour attacher Web2py à un fournisseur de données, car il communique avec presque toutes les principales bases de données existantes.

Une fonction vraiment utile liée à la base de données dans Web2py est la possibilité de générer un diagramme des modèles, vous permettant de visualiser comment vos modèles sont liés les uns aux autres. Vous devrez cependant installer la bibliothèque PyGraphviz pour activer cette fonctionnalité.

Web2py fournit de nombreux autres composants de qualité professionnelle: fonctions d'internationalisation, plusieurs méthodes de mise en cache, contrôle d'accès et autorisation, et même des effets frontaux (par exemple, un sélecteur de date dans les formulaires) via la prise en charge intégrée de jQuery et AJAX. Des hooks pour les middlewares externes et internes sont également inclus, bien que vous ne soyez pas autorisé à utiliser des middlewares pour remplacer les fonctions principales de Web2py. Cependant, il n'y a pas encore d'utilisation explicite de la fonctionnalité asynchrone de Python dans Web2py, bien qu'il existe un planificateur pour gérer les tâches de longue durée. 

Il n'est pas étonnant que la documentation de Web2py soit appelée «le livre». Tout d'abord, il couvre une quantité incroyable de matériel sur Web2py, Python et les environnements de déploiement utilisés pour les deux. Deuxièmement, il est écrit dans un style narratif très accessible. Troisièmement, il traite en profondeur des scénarios courants de création d'applications. Il y a un chapitre entier, par exemple, sur l'utilisation de jQuery pour créer des applications AJAX.

Weppy

Weppy se sent à mi-chemin entre la simplicité minimale de Flask et l'exhaustivité de Django. Alors que le développement d'une application Weppy a la simplicité de Flash, Weppy est livré avec de nombreuses fonctionnalités trouvées dans Django, comme les couches de données et l'authentification. Ainsi, Weppy est adapté aux applications allant d'extrêmement simples à modestement sophistiquées.

À première vue, le code Weppy ressemble beaucoup au code Flask ou au code Bottle. Peu d'instructions sont nécessaires pour mettre en place un site Web de base à itinéraire unique. Les itinéraires peuvent être décrits par des décorateurs de fonction (la manière la plus simple) ou par programme, et la syntaxe pour le faire est étroitement liée à Flask / Bottle. La création de modèles fonctionne à peu près de la même manière, à part des variations mineures de syntaxe.

Weppy contraste avec ces plus petits frameworks en incluant certaines fonctionnalités qu'ils n'incorporent que sous forme de plug-ins ou de modules complémentaires. Par exemple, ni Flask ni Bottle ne disposent d'un ORM intégré ou d'un système de gestion de données. Weppy inclut un ORM, bien que basé sur le projet pyDAL plutôt que sur SQLAlchemy, bien plus populaire. Weppy prend même en charge les migrations de schémas, que Django prend en charge dans le cadre de son ORM (le système de migration de Django est également beaucoup plus automatisé). Bien que Weppy ait un mécanisme d'extension, la liste des add-ons officiellement approuvés est minuscule, bien plus petite que le catalogue d'extensions pour Flask.

Des frameworks plus légers comme Weppy sont souvent utilisés pour créer des API RESTful, et Weppy est équipé de fonctions pratiques à cet effet. Mettez un @servicedécorateur sur un itinéraire, et les données que vous renvoyez sont automatiquement formatées dans votre choix de JSON ou XML.

Weppy inclut d'autres fonctionnalités qui semblent plus conformes à un cadre plus large, mais qui sont implémentées sans encombrement. Les exemples incluent les mécanismes de validation des données, la gestion des formulaires, la mise en cache des réponses et la validation des utilisateurs. Dans tous ces cas, Weppy adopte une approche «juste assez». Les fonctionnalités fournies ne sont pas aussi complètes que celles que vous pourriez trouver dans Django et d'autres frameworks lourds, mais un développeur n'a pas besoin d'investir beaucoup de travail pour les rendre utiles, et elles peuvent toujours être étendues après coup.

La prise en charge de l'internationalisation est une autre fonctionnalité lourde du cadre de Weppy. Les chaînes des modèles peuvent être traduites en fonction des fichiers de paramètres régionaux fournis avec l'application, qui sont de simples dictionnaires Python. Le choix de la langue peut également être défini en analysant la requête du navigateur (c'est-à-dire l'en-tête HTTP Accept-Language) ou en liant une traduction à une route spécifique.

La documentation de Weppy a la même saveur que le framework lui-même. Il est propre, lisible et écrit pour être consommé par les humains. En plus de l'exemple habituel de «bonjour le monde», il comprend un joli didacticiel pas à pas qui vous permet de créer un système de micro-blogging en tant que projet de démarrage.

Les plans à long terme pour Weppy incluent la prise en charge d'async et de sockets en tant qu'entités de bas niveau et de première classe. Les développeurs de Weppy prévoient d'introduire ces fonctionnalités dans la version 2.0, puis d'exiger Python 3.7 ou supérieur pour toutes les futures versions de Weppy.

Zope