title:      Développement web python et frameworks, tour d&#39;horizon début 2007
slug:       developpement-web-python-et-frameworks-tour-d-horizon-debut-2007
date:       2007-03-30 21:23:28
type:       post
vignette:   images/logos/pylons_django.png
contextual_title1:  Sortie de Django 1.0, une année de nouveautés
contextual_url1:    20080902-sortie-de-django-10-une-annee-de-nouveautes
contextual_title2:  Des vacances et des liens
contextual_url2:    20071007-des-vacances-et-des-liens
contextual_title3:  Une solution pour faciliter la conception d&#39;applications web RESTful avec Django
contextual_url3:    20070807-une-solution-pour-faciliter-la-conception-d-applications-web-restful-avec-django

<p>Un article intitulé «&nbsp;<a href="http://jesusphreak.infogami.com/blog/vrp1">Python web development and frameworks in 2007</a> » très intéressant que j'aurais aimé traduire fait le bilan sur le développement web python et ses principaux frameworks, de <a href="http://webpy.org/">web.py</a> à <a href="http://www.zope.org/">Zope</a>, en passant par <a href="http://www.djangoproject.com/">Django</a>, <a href="http://pylonshq.com/">Pylons</a> et <a href="http://www.turbogears.org/">TurboGears</a>. J'ai appris de nombreuses choses donc je vous invite à aller le lire sur place mais c'est vrai que c'est assez long donc en voici un résumé accompagné de mes commentaires.</p>

<p><strong>Rappel préliminaire</strong>&nbsp;: alors que David H. (principal développeur de Ruby on Rails) <a href="http://www.djangoproject.com/snakesandrubies/">se moque gentiment</a> du nombre de frameworks python assez paradoxal compte tenu de la maxime de Python&nbsp;: There Is Only One Way To Do It (en opposition à Perl), l'auteur de l'article rappelle que la diversité appelle l'émulation (et le choix pour les utilisateurs) et que la situation actuelle donne raison à Python compte-tenu du manque de réactivité dans le développement de Ruby on Rails. <em>Je ne sais pas où en est le développement actuel de <abbr title="Ruby on Rails">RoR</abbr> donc je ne peux pas commenter cette affirmation même si je soupçonne un certain parti pris... quelqu'un pour confirmer/infirmer ?</em></p>


<p>Pour commencer, l'auteur fait le point sur les deux solutions que l'on peut considérer comme étant aux antipodes du développement web python&nbsp;: Zope et web.py. <strong>Zope a longtemps été la seule solution pour faire du web sérieusement en Python et souffre (malheureusement ?) de l'image d'usine à gaz qui la poursuit depuis l'arrivée des «&nbsp;nouveaux » frameworks web</strong>. Ce n'est pourtant pas une solution à rejeter pour certaines tâches car de nombreux composants sont disponibles et malgré une courbe d'apprentissage assez raide, la tendance actuelle est à sa simplification.</p>


<p>À l'opposé, <strong>web.py est quasiment l'anti-framework</strong>. Ironiquement, c'est le premier framework que j'ai découvert (probablement <a href="http://atonie.org/">grâce à Simon</a>) et qui m'a fait entrevoir l'étendue des possibilités offertes par Python dans le développement web. À l'origine, un seul fichier était nécessaire pour faire tourner une application, aujourd'hui ce framework a évolué mais il est toujours aussi simpliste/minimaliste. Il est donc à mon avis déconseillé pour les développements conséquents qui seront plus rapidement réalisés via des frameworks permettant d'avoir des raccourcis à tous les niveaux. En revanche, pour comprendre comment fonctionne un framework web dans ses moindres rouages, il y a difficilement mieux (lire auparavant l'<a href="http://bitworking.org/news/Why_so_many_Python_web_frameworks">excellent article de Joe Gregorio</a> peu aider).</p>


<h2>Django&nbsp;: le tout en un fonctionnel</h2>


<p>Je ne sais pas s'il est nécessaire de vous rappeler l'idéologie sous-jacente car j'en ai déjà parlé ici mais en gros il s'agit d'avoir un ensemble de composants cohérents entre eux, autant dans leur fonctionnalités que dans leur documentation. Tout a donc été écrit <em>from scratch</em> (argument supplémentaire, au début des développements les bibliothèques actuelles n'existaient pas) pour arriver à la <a href="http://www.djangoproject.com/weblog/2007/mar/23/096/">récente version 0.96</a> actuelle.</p>


<p><strong>Le gros avantage de Django c'est sa communauté importante</strong> (ici l'annonce de Guido y est aussi pour quelque chose à mon avis) <strong>et sa documentation</strong> (c'est quasiment un des buts initial donc ça semble normal).</p>


<p><strong>Les inconvénients soulevés</strong> ne sont pas forcément tous valables à mon avis mais pour ceux qui sont indiscutables, <strong>concernent l'impossibilité réelle d'utiliser d'autres briques Python que celles définies par défaut</strong>. L'exemple donné est celui de SQLAlchemy et les arguments donnés sont bons&nbsp;: la branche ouverte pour gérer ce cas végète (comme beaucoup d'autres d'ailleurs).</p>


<p><strong>Les vues génériques et l'administration auto-générée finissent toujours par décevoir</strong>, ce qui est logique étant donné la manière dont c'est mis en avant dans la documentation (heureusement que la situation est clarifiée dans le livre).</p>


<p><strong>Il manque un dépôt centralisé d'applications</strong>. <a href="http://www.djangosnippets.org/">Django snippets</a> est un excellent début en ce sens mais il faudrait pouvoir déposer des applications complètes aussi. Pour l'instant ces ressources sont éparpillées un peu partout... <em>edit du lendemain&nbsp;: c'est <a href="http://groups.google.com/group/django-hotclub">en cours de réflexion</a></em>.</p>


<p><strong>Le manque de réactivité de la part de l'équipe de développement</strong> est soulevé et je suis assez d'accord sur ce point (plusieurs de mes mails sont restés lettres mortes sur la liste de diffusion). La situation est en cours d'évolution avec l'élargissement de l'équipe et c'est une bonne chose.</p>


<p>En conclusion, <strong>Django est tout de même un excellent framework qui a le mérite d'être fonctionnel <em>maintenant</em></strong> et dont les récentes améliorations (<a href="http://www.djangoproject.com/documentation/newforms/">newforms</a>) sont prometteuses. <em>Je ne m'étends pas plus sur django mais de nombreux points sont évoqués, preuve que l'auteur sait très bien de quoi il parle, autant pour les avantages que pour les inconvénients</em>.</p>


<h2>Pylons&nbsp;: le framework à la carte</h2>


<p><strong>La philosophie de Pylons est</strong> à l'opposé de celle de Django, il s'agit <strong>de laisser le choix à l'utilisateur à chacun des niveaux pour l'utilisation de la bibliothèque existante qui lui convient</strong>. Par défaut, le framework ressemble beaucoup à Ruby on Rails et si vous souhaitez essayer Python en connaissant RoR, c'est le framework qu'il vous faut.</p>


<p><strong>Le gros avantage de Pylons réside donc dans sa capacité d'adaptation, un peu à la sauce UNIX</strong>&nbsp;: laisser le choix à l'utilisateur en proposant des utilitaires simples que l'on peut enchaîner via des <em>pipes</em>. Par ailleurs, il est à noter que le principal développeur est apparemment accessible ce qui est toujours intéressant.</p>


<p><strong>Le problème de pouvoir utiliser autant de briques est le manque de consistance de la documentation</strong>. Et même le meilleur des frameworks est inutilisable si l'on ne sait pas s'en servir (bon ok, j'exagère un peu ;-)).</p>


<p><strong>Les composants fournis par défaut sont en train de changer pour fournir une meilleure base de développement</strong>. En particulier <a href="http://toscawidgets.org/">Toscawidgets</a>, développé par l'équipe de TurboGears, mais aussi <a href="http://www.makotemplates.org/">Mako</a> pour les templates.</p>


<p>Quoi qu'il en soit, <strong>Pylons est conceptuellement vraiment intéressant et sera probablement à moyen terme une solution des plus alléchantes</strong>, surtout si la réutilisation d'applications venant d'autres frameworks devient possible. Aller vers une inter-opérabilité en ce sens serait une petite révolution.</p>



<h2>TurboGears&nbsp;: un framework pour les unir tous et...</h2>


<p><strong>La philosophie de ce framework est de prendre les meilleurs composants Python existants et de mettre la glu permettant de les lier pour arriver au framework optimal</strong>. L'idée est très bonne mais je ne suivais plus depuis quelques temps le développement de ce framework (on peut difficilement tout suivre, heureusement qu'il y a de tels articles récapitulatifs !). J'ai été vraiment très surpris d'apprendre la tournure prise par son développement.</p>


<p>Le concept est très bon <strong>mais</strong> et c'est là où TurboGears a échoué, <strong>il ne faut pas se tromper lorsque l'on choisit les composants initiaux</strong>, au risque de devoir tout recommencer. Et c'est ce qui arrive apparemment à ce framework, ce qui me cause un peu de soucis pour <a href="http://leblog.cfait.fr/post/2007/03/28/99">le projet actuel de Guillaume</a> par exemple...</p>


<p>D'après ce que j'ai pu comprendre, <strong>la version actuelle (1.0) est gelée en attendant le développement de la v2 qui devrait voir quasiment l'ensemble des composants changés</strong> (soit de version, soit d'orientation). C'est un choix qui est difficile à prendre et qui annonce un long hiver pour TurboGears, ce qui se reflète dans le désintéressement de la part de sa communauté apparemment. Je rejoins l'avis de l'auteur dans l'idée d'un rapprochement avec Pylons qui laisserait le choix de changer aisément à l'utilisateur et qui se baserait sur certaines des bibliothèques développées spécifiquement pour TurboGears comme Toscawidgets.</p>


<p>En tout cas j'en reviens pas d'un tel revirement de situation, j'espère que le projet pourra tout de même se relever car c'était vraiment bien parti et ça avait dopé, entre autres, le buzz autour des frameworks web Python au début de l'année dernière. Il était alors <a href="https://larlet.fr/david/biologeek/archives/20060715-comparaison-de-turbogears-et-django-deux-frameworks-web-python/">aussi populaire que Django</a>&nbsp;!</p>


<h2>Conclusion</h2>


<p>Django et Pylons sont deux solutions ayant fait des choix différents dans l'implémentation de leur framework mais qui sont toutes deux actuellement fonctionnelles. Le choix entre les deux se fera à mon avis en fonction de votre expérience et de votre propre avis sur leur philosophie.</p>


<p>Comme je le disais précédemment, <strong>le développeur est aujourd'hui confronté au difficile dilemme d'utiliser un framework adapté à ses besoins sans pouvoir connaître tous les frameworks existant en détail car ils sont trop nombreux et évoluent trop rapidement</strong>. Ne serait-ce que pour être compétent sur Django, Pylons et Ruby on Rails par exemple, c'est mission quasi-impossible... et je ne parle même pas des frameworks PHP&nbsp;!</p>


<p>Quelle solution alors&nbsp;? <del>Il ne reste plus que les drogues dures je crois</del> Apprenez ce qui vous plaît. Vous travaillez pour un client, ok. Mais <strong>vous travaillez dans le développement web aussi pour le «&nbsp;fun » que ça procure de coder, n'oubliez jamais ça</strong>. Prenez du plaisir dans votre travail et arrêtez de vous prendre la tête sur le <a href="https://larlet.fr/david/biologeek/archives/20060907-choisir-un-framework-web/">choix du framework</a>, si vous travaillez deux fois plus rapidement car ce que vous faites vous plaît, le client sera toujours content. Et vous aussi :-).</p>
