Les frameworks Python peuvent être divisés en quelques zones car Python est un langage très diversifié et peut être utilisé dans divers domaines. Chacun de ces champs a ses propres cadres, dont certains sont plus populaires que d’autres. L’un des domaines les plus populaires dans lesquels Python est appliqué est le développement Web, sur lequel nous nous concentrerons aujourd’hui.
Les frameworks présentés peuvent être divisés en trois catégories : les frameworks full stack, qui offrent de nombreuses fonctionnalités prêtes à l’emploi côté serveur et côté client ; les microframeworks, qui offrent un support côté serveur (parfois, ils peuvent être étendus côté client) et permettent de créer une application web simplement en utilisant un seul fichier Python ; et, enfin, les frameworks asynchrones, qui gèrent les requêtes de manière asynchrone.
Frameworks web Full-stack
Django
Django est l’un des frameworks Python les plus populaires. Il offre de nombreuses fonctionnalités prêtes à l’emploi telles que le panneau d’administration ou les Vues et formulaires génériques. Les principales caractéristiques de Django sont :
-
un script de gestion (« manage.py « » qui peut être utilisé pour effectuer la plupart des actions spécifiques au framework (comme démarrer le serveur de développement, créer un utilisateur administrateur, collecter des fichiers statiques, etc.),
-
traitement synchrone des requêtes,
-
Modèle d’architecture MTV (model-template-view) (qui est une variation du modèle model-view-controller),
-
mappage relationnel objet personnalisé (ORM) pour communiquer avec la base de données,
-
utilisation de fonctions et de classes pour la création de contexte de vue et la gestion des actions,
-
Django est strict et impose son propre style de codage au développeur – beaucoup de méta–programmation,
-
très bonne documentation complète avec des exemples,
-
rendu de modèles HTML personnalisés
-
système de routage d’URL personnalisé,
-
conformité à la norme WSGI,
-
prise en charge des fichiers statiques – routage d’URL ainsi que détection et collecte,
-
un grand nombre de modules externes, par exemple Django REST Framework, Django CMS, canaux Django (websockets).
Django convient parfaitement aux projets de grande envergure, où un support backend et frontend étendu est requis ou dans les cas où le temps joue un rôle crucial, car Django offre un grand nombre de composants prêts à l’emploi. Le codage dans Django repose principalement sur la personnalisation de parties génériques de code. Le développeur doit suivre un ensemble de règles fournies avec un élément donné. Pour les projets où une grande flexibilité de code est souhaitée, Django peut ne pas être le meilleur choix.
37,514 étoiles Github / 183,588 Questions StackOverflow
Web2py
Web2py se concentre sur la sécurité, la vitesse de développement et la facilité d’utilisation. Il offre de nombreuses fonctionnalités prêtes à l’emploi: un serveur Web, une base de données, un panneau d’administration, un wiki ou des widgets de grille. Les principales caractéristiques du cadre sont:
-
traitement synchrone des requêtes,
-
Couche d’abstraction de base de données personnalisée (DAL) qui agit comme ORM,
-
force une structure MVC,
-
des fonctions et des classes peuvent être utilisées pour créer des contrôleurs,
-
philosophie stricte « Il ne devrait y avoir qu’une seule façon de faire les choses »,
-
une documentation riche avec de nombreux exemples,
-
moteur HTML personnalisé qui permet d’utiliser du code Python dans les modèles,
-
routage personnalisé – fonction URL qui génère des chemins internes pour les actions et les fichiers statiques,
-
prise en charge de la norme WSGI, mais il est possible d’utiliser CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) ou autre,
-
offre le routage de fichiers statiques et le streaming pendant le développement,
-
a des services REST intégrés mais nécessite le framework Tornado pour l’utilisation des sockets Web.
Web2py a été fortement inspiré par les frameworks Ruby on Rails et Django et tire le meilleur de ces deux frameworks.
Cela peut être un bon choix pour les programmeurs qui veulent migrer de Ruby ou pour ceux qui s’ennuient de Django mais qui recherchent un autre framework grand et riche en fonctionnalités.
Il offre une application « admin », qui agit comme unE basé sur le Web pour le développement et la gestion d’applications (par exemple, créations d’applications, éditeur de code). Il est également pris en charge par PyCharm.
En général, Web2Py ne manque pas de fonctionnalités que possède Django. Ces deux cadres peuvent être utilisés pour accomplir les mêmes tâches. Web2Py est plus jeune, et sa communauté est plus petite que Django, il pourrait donc être un peu plus difficile de trouver de l’aide en cas de problème.
1 665 étoiles GitHub / 2 004 questions de StackOverflow
TurboGears
TurboGears connecte de nombreux services externes pour créer un framework fonctionnel:
-
traitement synchrone des requêtes,
-
modèle model-view-controller (MVC),
-
utilise SQLAlchemy ORM,
-
permet l’utilisation de fonctions et la génération de contexte de vue de classe,
-
il offre des classes génériques prêtes à l’emploi (APIController très intéressant pour la création d’API REST ),
-
la documentation est un peu chaotique mais il peut s’agir de s’y habituer,
-
utilise le langage de modèle Kajiki,
-
méthodes de routage/répartition d’URL personnalisées,
-
compatible avec le WSGI standard,
-
prend en charge les configurations de chemin de fichiers statiques
-
peut être étendu avec des modules supplémentaires, par exemple Circus et Chaussette pour la prise en charge des sockets Web.
Le framework n’est pas aussi populaire que ses deux prédécesseurs, mais il vaut néanmoins la peine d’être vérifié.
259 étoiles GitHub / 107 questions de StackOverflow
Microframeworks
Flask
C’est l’un des microframeworks Python les plus populaires, il est fiable et rapide. On dit qu’il a été créé comme une blague. Les principales caractéristiques du cadre sont:
-
prise en charge des requêtes synchrones,
-
ne force aucune architecture de projet, mais a quelques recommandations (package, module, plans),
-
il n’offre pas d’ORM, mais SQLAlchemy ou autre peut être utilisé,
-
prend en charge les fonctions ainsi que certaines vues de classe génériques de type Django (à partir de Flask 0.7),
-
style de codage lâche, il ne force aucune solution, la plupart des décisions sont laissées à la discrétion du développeur,
-
bonne documentation avec des exemples,
-
il est possible d’utiliser le moteur de modèle HTML Jinja2,
-
Système de routage Werkzeug,
-
compatible avec le WSGI standard,
-
prend en charge le routage de fichiers statiques de base,
-
peut être étendu avec des modules tiers supplémentaires, par exemple Flask-RESTful pour la création d’API REST ou flask-socketio pour la prise en charge des Sockets Web.
Ce framework fera l’affaire dans les petits et moyens projets. Il dispose de modules tiers prêts à être utilisés ainsi que de bonnes solutions natives.
Flask devrait faire ses preuves dans les tâches où des fonctionnalités personnalisées compliquées sont requises mais Django semble trop grand pour la tâche. D’un autre côté, définir Flask pour un projet plus important dès le début peut être délicat car il n’y a pas de moyen « officiel » de le faire.
39 946 étoiles Github / 24 512 questions de StackOverflow
Pyramid
Pyramid commence par une installation minimale qui peut être étendue en cas de besoin. Il convient de noter que cela fait partie du projet Pylons, qui intègre des technologies liées au Web.
Ce sont quelques-unes des caractéristiques les plus importantes de Pyramid:
-
offre un traitement synchrone des requêtes,
-
les contextes de vues peuvent être définis avec des fonctions ainsi que des classes,
-
il n’y a pas d’ORM spécifique mais SQLAlchemy est recommandé,
-
ne force aucun style de codage ou architecture de projet – TIMTOWTDI,
-
offre une bonne documentation avec des tutoriels et des exemples,
-
offre /p>
-
aucun moteur de modèle HTML spécifique n’est fourni mais Chameleon est recommandé,
-
un système de routage personnalisé intéressant permet à plusieurs vues de correspondre à une URL,
-
il est compatible WSGI,
-
prise en charge étendue des fichiers statiques – service de fichiers, routage d’URL pour les fichiers statiques,
-
peut être étendu avec des modules externes, par exemple Cornice pour les API REST, aiopyramid avec prise en charge asynchrone.
Ce framework peut être un bon choix dans les cas où vous ne voulez pas passer du temps à apprendre des solutions de frameworks personnalisées (comme ORM) mais avez toujours besoin d’un outil complet pour créer des logiciels, car Pyramid prend en charge l’utilisation de nombreuses solutions autonomes bien connues.
Il a de bonnes capacités de mise à l’échelle – se présente comme un framework qui peut « commencer petit et finir grand ».2 974 questions GitHub / 2 060 questions StackOverflow
CherryPy
Permet la création d’application web de la même manière que le projet Python orienté objet. Il n’a pas de fonctionnalités complètes et ne force aucune solution spécifique – le développeur peut décider comment résoudre les problèmes qui se produisent pendant le développement. Les caractéristiques de CherryPy sont:
-
offre un support de requête synchrone,
-
ne force aucune structure ou architecture de projet,
-
ne fournit aucun ORM, mais SQLAlchemy ou SQLObject peuvent être utilisés,
-
ne fournit aucun moteur de modèle HTML,
-
a un style de codage lâche,
-
-
offre une documentation décente,
-
les routes du système de routage (version Python du système de routage Rails) peuvent être utilisées,
-
est compatible avec WSGI,
-
a un bon support pour les fichiers statiques – permet de servir des fichiers ou un fichier entier
-
permet la création d’API REST avec des outils intégrés uniquement,
-
facilite l’utilisation des Sockets Web via le module ws4py.
>
Le principal avantage de CherryPy est qu’il est livré avec un serveur WSGI prêt pour la production, ce qui élimine la nécessité de configurer un serveur externe lors du déploiement.
Le principal inconvénient de ce framework est qu’il n’est pas très populaire, donc il a un plus petit nombre de modules externes et une communauté moins dynamique.
829 étoiles GitHub / 1 244 questions de StackOverflow
BottlePy
C’est encore un autre microframework qui se présente comme rapide et simple. Il est à noter que BottlePy est livré en tant que module unique sans dépendances supplémentaires. Caractéristique:
-
implémente la gestion synchrone des requêtes,
-
propose un moteur HTML personnalisé mais d’autres moteurs tels que Mako, Jinja2 ou Cheetah pourraient être utilisés,
-
ne fournit pas d’ORM mais il est possible d’utiliser des solutions externes, par exemple. SQLAlchemy ou Macaron,
-
ne force aucune architecture de projet,
-
offre une documentation suffisante,
-
dispose d’un système de routage personnalisé mais le système de routage Werkzeug peut être utilisé (via bottle-werkzeug),
-
implémente la norme WSGI,
-
offre des fonctions statiques de base le routage de fichiers,
-
offre des greenlets (avec gevent) comme solution de gestion des requêtes asynchrones,
-
il est possible de créer une API REST sans modules externes – prend en charge les données client JSON.
En raison de sa petite taille (un seul fichier) et de l’absence de dépendances externes (bibliothèque standard Python uniquement), il peut être un bon choix pour les débutants qui souhaitent commencer à apprendre le développement Web.
Il peut également faire du bon travail avec de très petits sites ou des tests jetables. BottlePy ne sera pas le meilleur choix pour les projets de taille moyenne ou plus importants, car il faudrait un peu de travail pour arriver au point de départ des cadres plus lourds.
5 795 étoiles GitHub / 1 288 questions StackOverflow
Frameworks asynchrones
Aiohttp
C’est un framework Python asynchrone étendu. Il offre un serveur avec middleware, des signaux, des arrêts gracieux et bien d’autres:
-
gestion asynchrone des requêtes, websockets client et serveur,
-
il est possible d’utiliser GINO async ORM,
-
prend en charge les vues basées sur les fonctions et les classes,
-
documentation suffisante mais un peu difficile à naviguer,
-
il est possible d’utiliser SQLAlchemy pur mais GINO comme un wrapper asynchrone est recommandé,
-
prend en charge les pilotes asynchrones Postgres, MySQL, Redis,
-
aucun moteur de modèle prêt à l’emploi mais Jinja2 ou Mako pourrait être appliqué,
-
système de routage personnalisé,
-
pas de support WSGI,
-
prend en charge le routage pour les fichiers statiques,
-
un grand nombre de modules tiers qui peuvent étendre davantage le framework, par exemple aiohttp-apispec pour la création d’API REST, aiohttp-security pour les authentifications et les autorisations des utilisateurs.
Comme il offre de nombreuses fonctionnalités prêtes à l’emploi (par exemple, prise en charge des côtés client et serveur, websockets, middleware, signaux), Aiohttp peut être utilisé avec des projets de taille moyenne (ou même avec des projets plus importants).
6,378 étoiles Github / 503 questions de StackOverflow
Sanic
Sanic est un framework très semblable à un flask: il est petit, libéral et laisse beaucoup de place au développeur. Sa principale caractéristique déterminante est sa vitesse.
Voici quelques autres caractéristiques:
-
prise en charge du gestionnaire de requêtes asynchrones,
-
n’offre aucune interface de base de données mais GINO async ORM peut être installé,
-
offre la fonction et la classe comme source du contexte de vue,
-
le style de codage est plutôt lâche, très similaire à Flask,
-
documentation fournie avec » readthedocs »,
-
Le moteur de modèle HTML Jinja2 peut être utilisé,
-
un système de routage sur mesure,
-
n’est pas compatible WSGI par défaut mais un module tiers (sanic-dispatcher) peut être installé pour le prendre en charge,
-
a des fonctions de base le routage de fichiers statiques,
-
peut être étendu avec des modules supplémentaires, par exemple Sanic CRUD pour la création d’API REST.
Ce devrait être une bonne décision de choisir Sanic lorsque vous avez déjà eu une certaine expérience avec Flask, car ces deux frameworks ont beaucoup en commun.
Sanic offre une gestion de la configuration par défaut, alors que dans aiohttp mentionné précédemment, l’utilisateur doit le faire lui-même. Il dispose de modules tiers intéressants tels qu’un limiteur de taux de requêtes ou une intégration GraphQL.
10 625 étoiles Github / 58 questions StackOverflow
Tornado
Tornado est un framework web Python et une bibliothèque de réseautage asynchrone, initialement développé sur FriendFeed (un site d’agrégation sociale). Grâce à cela, il offre une intégration intégrée avec des services sociaux tels que Google, Facebook et Twitter.
L’intégration avec d’autres frameworks et bibliothèques est également possible : applications Twisted, asyncio ou même WSGI. Caractéristiques de Tornado:
-
offre de nombreuses classes génériques qui peuvent être utilisées pour créer l’application, par exemple Router, ou SocketHandler pour websockets,
-
moteur de template HTML personnalisé,
-
documentation claire et facile à lire,
-
les fonctions et les classes peuvent être utilisées pour définir des actions et gérer des requêtes,
-
gestion du routage personnalisé – offre des classes génériques qui peuvent être utilisées pour la création d’itinéraires,
-
il prend en charge WSGI, mais ce n’est pas recommandé – l’utilisateur doit utiliser les propres interfaces de Tornado à la place,
-
prise en charge des websockets prêts à l’emploi, authentification (par exemple via Google), et des fonctionnalités de sécurité (comme la signature de cookies ou la protection XSRF),
-
aucun outil supplémentaire n’est nécessaire pour la création d’API REST.
Le framework devrait bien fonctionner dans les cas où de nombreuses connexions entrantes peuvent être traitées rapidement ou dans des solutions en temps réel, par exemple des discussions. Tornado essaie de résoudre le problème du c10k, donc une vitesse de traitement élevée est une priorité.
Un autre avantage de Tornado est son soutien natif aux services sociaux. Ce framework ne sera pas un bon choix pour créer des sites CRUD standard ou des applications de grande entreprise, car il n’a pas été conçu pour être utilisé de cette façon. Pour les projets plus importants, il peut être intégré aux applications WSGI dans le cadre de leur structure plus grande et s’occuper des tâches nécessitant des vitesses de manipulation élevées.
16 768 étoiles Github / 3 263 questions StackOverflow
Résumé
Les frameworks Web présentés ci-dessus ne sont qu’un petit morceau d’une famille de frameworks Python plus grande et plus large.
Chaque solution a ses points forts et ses points faibles et, comme pour tout le reste, il n’y a pas de correspondance parfaite qui résoudra chaque tâche donnée.
Les questions les plus importantes auxquelles il faut répondre lors du choix du cadre sont dictées par des problèmes à résoudre.
- Si une prise en charge étendue du côté serveur et navigateur est requise, un framework full-stack peut être un bon choix.
- Pour les petits projets ou lorsque la flexibilité dans l’écriture du code est une priorité, un micro-cadre peut être la solution.
- Dans les cas où la vitesse de traitement des demandes joue un rôle important ou où un projet devra faire face à de longs temps de réponse, un framework asynchrone devrait faire l’affaire.