Un petit tour des frameworks Web Python 28


Bottle : le plus petit disponible (tient dans un fichier). Génial pour du code jetable ou des petits sites, etc. Fantastique outil d’enseignement et d’apprentissage. En plus, ça tient plutôt bien la charge compte tenu de la taille.

django : le framework Python le plus connu. On peut tout faire avec, l’écosystème est fantastique (il y a des apps djangos tierces partout pour tout et n’importe quoi, c’est un truc de fou). Mais le maîtriser prend du temps. Efficace pour construire un site web avec beaucoup de logique personnalisée. Au final, si on veut être sérieux dans en programmation Web avec Python, on finit toujours par passer par Django.

flask : sa taille est entre django et bottle, et avec tout ce qu’il faut pour faire un site de taille moyenne. Il commence à avoir pas mal de plugins disponibles un peu partout sur la toile, et est une alternative très sympa quand on n’a pas besoin de charger les 3 tonnes de Django.

wep2py : se positionne en alternative à Django et Flask, mais avec une philosophie très différente. Pas mal de magie (à la rails), des interfaces graphiques pour l’admin, composants très couplés mais très intégrés… Je ne suis pas fan, mais on m’en a dit du bien.

cherrypy : un framework WSGI pure Python qui a de très bonnes perfs sans rien rajouter, même en prod. Mais depuis qu’ils ont rendu disponible sa partie serveur et qu’on peut l’utiliser pour Django/flask/bottle, ça ne vaut plus le coup d’utiliser sa partie framework qui n’a rien de fantastique.

pyramid : le plus gros compétiteur de Django en termes de fonctionnalités. Beaucoup moins monolithique, et bien plus flexible, donnant pas mal de contrôle. Mais l’intégration des composants de django le rend beaucoup plus facile à maîtriser, et son écosystème est 100 fois meilleur (j’ai toujours été en froid avec l’écosystème Zope).

twisted un framework internet asynchrone en pur Python. J’ai dit INTERNET, pas WEB. On peut faire HTTP, mais aussi SSH, IMAP, FTP, et à peu près n’importe quoi. Surpuissant, et ses performances sont incroyables. Son API est aussi la plus merdique de tout l’univers Python. Apprendre et utiliser Twisted, c’est comme se branler avec des gants de boxe en récitant l’alphabet à l’envers.

tornado : framework Web asynchrone. Techniquement le seul compétiteur de nodejs en pur Python (pas de gevent, d’extension C, etc) si on exclue crossbar encore trop immature. L’API n’est pas incroyable, mais pas trop dur, et les perfs sont bonnes. Les Websocket marchent clé en main.

cyclone : tornado qui tourne dans l’event loop de twisted. Pour pouvoir utiliser l’API de tornado pour le Web, mais les outils de twisted pour le reste. Si vous êtes capable d’utiliser ça à son plein potentiel, qu’est-ce que vous foutez à lire cet article ?

webpy : un ancêtre. Un fantôme du passé. Do not use.

Il existe ensuite tout un tas d’expérimentations de framework avec asyncio, gevent, etc. C’est plus du bricolage qu’autre chose pour le moment, alors je ne recommande pas de base un gros projet dessus à moins d’être déjà très à l’aise avec la prog web python.

28 thoughts on “Un petit tour des frameworks Web Python

  • Vivien

    “Apprendre et utiliser Twisted, c’est comme se branler avec des gants de boxe en récitant l’alphabet à l’envers.” :’D Purée la phrase culte j’en peux plus là… Merci

  • Maxime L.

    … Et l’ironie, c’est que ce blog est toujours propulsé par WordPress malgré toute ces frameworks alternatifs Python (dont certains ont de très bonnes applications pour faire des blogs) :-)

  • Sam Post author

    On a déjà répondu 100 fois à cette assertion. Faudra que je fasse un article un jour.

  • Maxime L.

    Au temps pour moi dans ce cas, je ne feuillette que rarement les commentaires, et quand je le fais, c’est en diagonale. J’ai dû loupé la remarque à chaque fois.

    J’aimerais bien voir l’article tout de même car je sais bien que WordPress a des qualités et c’est intéressant de voir lesquels sont mises en avant.

  • Zanguu

    @Maxime, Je crois que le premier argument c’est la flemme et je respecte ça :)
    Mais quand j’ai droit au bug “de la page qui s’affiche en mobile alors que 2 secondes avant j’étais sur la page d’accueil en desktop”, je me dis que quand même ce serait bien de changer.

  • Shagshag

    @Zanguu : La flemme et surtout le côté pratique.

    J’ai jamais fait de blog en python pour être honnête, mais si tu regarde là : https://wiki.python.org/moin/PythonBlogSoftware ça fait pas envie. Les 3/4 des projets sont morts, le mieux que j’ai vu est Mezzanine (http://mezzanine.jupo.org/) mais pas de thèmes, pas d’extensions.

    Si tu fais un blog c’est pour publier, pas pour développer.
    Wordpress a des inconvénients, je trouve le code dégeulasse, mais l’installation est simple, l’utilisation, la configuration et la personnalisation idem et les ressources infinies.

    Ok Sam et Max ont vendu leurs âmes pour la facilité de WordPress mais je ferais pareil.

  • strompy

    Un bon blog seo friendly, multi-user avec un installer simple, un système de backup et une thème responsive qui déchire tu fais ça en 3 jours avec un bon framework python ou autre.

    Le problème c’est la maintenance, cela peut prendre plusieurs jours par an (upgrade du framework), alors qu’avec WordPress tant que tu as une config apache, nginx solide, les mises à jours sont automatique et la securité est plus que bonne.

    Maintenant ce qui est reproché ici, c’est le fait que des dev django, développeurs plutôt perfectionnistes puissent se contenter de WordPress qui est très loin d’être une merveille.

  • Lhassa

    super! merci pour les info!

    en python pur, j’ai utilisé pelican (je ne sais plus si déjà commenté sur le blog), simple et plutôt efficace. Il est assez facile de faire des plugin simple dessus…

  • fero14041

    @Sam & Balisong: Euh, pour TurboGears, je ne crois pas qu’il soit remplacé par Pyramid. TurboGears est basé sur le framework Pylons, qui lui a été remplacé par Pyramid (et TG continue d’utiliser Pylons me semble-t-il). Mais de ce que j’avais compris, TurboGears se voulait un concurrent de Django en termes de fonctionnalités, ce qui n’est pas le but de Pyramid.

  • Zanguu

    @Sam (ou @Max), un article sur Cyclone dans les tuyaux ? Première fois que vous en parlez et, outre le fait que ça me nique encore un nom pour un projet Twisted, j’ai du mal à voir ce qu’il apporte réellement (à part peut être une API plus clair pour Twisted).

  • Sam Post author

    @fero14041: effectivement j’ai dis une grosse connerie. Je ne vais donc pas donner mon avis sur turbogear puisque j’ai bien illustré que je n’ai pas l’expérience pour le faire.

    @Zanguu: essentiellement pouvoir utiliser la simplicité de tornado pour la prog web, et la puissance de twisted pour le reste, dans un seul projet. Mais non, je ne compte pas faire d’article dessus pour le moment.

  • Xavier Combelle

    @Florient fiole est intéressant, mais à ce que j’ai vu il faut ajouter |e à chaque fois qu’on veut faire un escape. Outre que c’est un peu lourd, c’est si facile à oublier. j’ai soumis une issue github. https://github.com/florentx/fiole/issues/5 . Je suis bien conscient que ca ne résoudra pas tous les problèmes de sécurité, mais ce serait bien quand même.

  • Sam Post author

    Je souhaites que ce truc disparaisse de la surface de la terre, donc non, je ne vais pas en parler.

  • Mojowork

    Je citerais Tim Berners-Lee (2013) : “Zope/Plone c’est bien mieux foutu que internet”

  • Sam Post author

    C’est sans doute pour ça que tout le monde utilise Zope Plone et personne n’utilise Internet.

    Mais bon, j’ai commencé ma carrière sur Plone. Premier projet, j’ai travaillé avec un mec, un brute en Zope. Il m’a dit : “la courbe d’apprentissange, c’est pas une courbe, c’est un mur”. Il a passé un mois pour donné à un site Plone les perfs qu’on a out of the box avec un site Django.

  • kontre
    Nan, tout le monde utilise node.js

    Edit: zut, les balises troll ne passent pas. Rah, quand est-ce que vous abandonnez WordPress ? :p

  • Mojowork

    Plone4 améliore grandement les perfs (jour VS nuit).
    D’autre part, il se trouve que j’en ai un peu plein le cul de lui qd même.

  • Batisteo

    Si quelqu’un voulait développer un éditeur collaboratif genre Etherpad mais en Python, il utiliserait quoi ? (maintenant, ou dans 2 ans)

  • Sam Post author

    Tornado ou autobahn. Ce dernier va faire l’objet d’un tuto prochainement.

  • Stan

    Merci pour cet article très intéressant pour moi qui vient du monde JS (Node) et PHP, d’après la liste que tu viens de fournir, il semblerait (sur le papier) que Tornado me convienne très bien. Je n’ai pas encore été regarder la documentation, mais dans l’esprit c’est un modèle non bloquant piloté par les évènements ? Si c’est le cas ça m’intéresse grandement !

  • Cyd

    J’en ris encore, concernant Twisted. À chaque fois que j’ai tenté un projet avec l’Api, je finissais avec plus de question que de réponse. Au final, j’utilisais socket,ftplib,ssl,paramiko,flask,django,thread,multiprocess,HttpServer …. bref tout sauf twisted

    Bravo pour votre travail, en passant :)

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.