Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <!doctype html>
  2. <html lang=fr>
  3. <head>
  4. <!-- Always define the charset before the title -->
  5. <meta charset=utf-8>
  6. <title>Développement web python et frameworks, tour d&#39;horizon début 2007 — Biologeek — David Larlet</title>
  7. <!-- Define a viewport to mobile devices to use - telling the browser to assume that the page is as wide as the device (width=device-width) and setting the initial page zoom level to be 1 (initial-scale=1.0) -->
  8. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  9. <!-- Fake favicon, to avoid extra request to the server -->
  10. <link rel="icon" href="data:;base64,iVBORw0KGgo=">
  11. <link type="application/atom+xml" rel="alternate" title="Feed" href="/david/log/" />
  12. <link rel="manifest" href="/manifest.json">
  13. <link rel="stylesheet" href="/static/david/css/larlet-david-_J6Rv.css" data-instant-track />
  14. <noscript>
  15. <style type="text/css">
  16. /* Otherwise fonts are loaded by JS for faster initial rendering. See scripts at the bottom. */
  17. body {
  18. font-family: 'EquityTextB', serif;
  19. }
  20. h1, h2, h3, h4, h5, h6, time, nav a, nav a:link, nav a:visited {
  21. font-family: 'EquityCapsB', sans-serif;
  22. font-variant: normal;
  23. }
  24. </style>
  25. </noscript>
  26. <!-- Canonical URL for SEO purposes -->
  27. <link rel="canonical" href="https://larlet.fr/david/biologeek/archives/20070330-developpement-web-python-et-frameworks-tour-d-horizon-debut-2007">
  28. </head>
  29. <body>
  30. <div>
  31. <header>
  32. <nav>
  33. <p>
  34. <small>
  35. Je suis <a href="/david/" title="Profil public">David Larlet</a>, <a href="/david/pro/" title="Activité professionnelle">artisan</a> du web qui vous <a href="/david/pro/accompagnement/" title="Activité d’accompagnement">accompagne</a><span class="more-infos"> dans l’acquisition de savoirs pour concevoir des <a href="/david/pro/produits-essentiels/" title="Qu’est-ce qu’un produit essentiel ?">produits essentiels</a></span>. <span class="more-more-infos">Discutons ensemble d’une <a href="/david/pro/devis/" title="En savoir plus">non-demande de devis</a>.</span> Je partage ici mes <a href="/david/blog/" title="Expériences bienveillantes">réflexions</a> et <a href="/david/correspondances/2017/" title="Lettres hebdomadaires">correspondances</a>.
  36. </small>
  37. </p>
  38. </nav>
  39. </header>
  40. <section>
  41. <h1 property="schema:name">Développement web python et frameworks, tour d&#39;horizon début 2007</h1>
  42. <article typeof="schema:BlogPosting">
  43. <div property="schema:articleBody">
  44. <img src="/static/david/biologeek/images/logos/pylons_django.png" alt="vignette" style="float:left; margin: 0.5em 1em;" property="schema:thumbnailUrl" />
  45. <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>
  46. <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>
  47. <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>
  48. <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>
  49. <h2>Django&nbsp;: le tout en un fonctionnel</h2>
  50. <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>
  51. <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>
  52. <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>
  53. <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>
  54. <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>
  55. <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>
  56. <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>
  57. <h2>Pylons&nbsp;: le framework à la carte</h2>
  58. <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>
  59. <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>
  60. <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>
  61. <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>
  62. <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>
  63. <h2>TurboGears&nbsp;: un framework pour les unir tous et...</h2>
  64. <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>
  65. <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>
  66. <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>
  67. <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>
  68. <h2>Conclusion</h2>
  69. <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>
  70. <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>
  71. <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>
  72. </div>
  73. </article>
  74. <footer>
  75. <h6 property="schema:datePublished">— 30/03/2007</h6>
  76. </footer>
  77. </section>
  78. <section>
  79. <div>
  80. <h3>Articles peut-être en rapport</h3>
  81. <ul>
  82. <li><a href="/david/biologeek/archives/20080902-sortie-de-django-10-une-annee-de-nouveautes/" title="Accès à Sortie de Django 1.0, une année de nouveautés">Sortie de Django 1.0, une année de nouveautés</a></li>
  83. <li><a href="/david/biologeek/archives/20071007-des-vacances-et-des-liens/" title="Accès à Des vacances et des liens">Des vacances et des liens</a></li>
  84. <li><a href="/david/biologeek/archives/20070807-une-solution-pour-faciliter-la-conception-d-applications-web-restful-avec-django/" title="Accès à Une solution pour faciliter la conception d&#39;applications web RESTful avec Django">Une solution pour faciliter la conception d&#39;applications web RESTful avec Django</a></li>
  85. </ul>
  86. </div>
  87. </section>
  88. <section>
  89. <div id="comments">
  90. <h3>Commentaires</h3>
  91. <div class="comment" typeof="schema:UserComments">
  92. <p class="comment-meta">
  93. <span class="comment-author" property="schema:creator">NiKo</span> le <span class="comment-date" property="schema:commentTime">31/03/2007</span> :
  94. </p>
  95. <div class="comment-content" property="schema:commentText">
  96. <p>Ta première conclusion me rappelle un commentaires à moua :D<br />
  97. <br />
  98. <a href="https://larlet.fr/david/biologeek/archives/20060907-choisir-un-framework-web/#c2302" title="https://larlet.fr/david/biologeek/archives/20060907-choisir-un-framework-web/#c2302" rel="nofollow">www.biologeek.com/journal...</a><br />
  99. <br />
  100. </p>
  101. </div>
  102. </div>
  103. <div class="comment" typeof="schema:UserComments">
  104. <p class="comment-meta">
  105. <span class="comment-author" property="schema:creator">bolo</span> le <span class="comment-date" property="schema:commentTime">31/03/2007</span> :
  106. </p>
  107. <div class="comment-content" property="schema:commentText">
  108. <p>Je suis assée etonnée de son affirmation. Alors que la version 1.2.3 vient de sortir.<br />
  109. <br />
  110. Se sont des querelles de clochers le meilleur framework web avec qui tu serras le plus productifs</p>
  111. </div>
  112. </div>
  113. <div class="comment" typeof="schema:UserComments">
  114. <p class="comment-meta">
  115. <span class="comment-author" property="schema:creator">Bader</span> le <span class="comment-date" property="schema:commentTime">31/03/2007</span> :
  116. </p>
  117. <div class="comment-content" property="schema:commentText">
  118. <p>Hmm, &quot;était aussi populaire que Django&quot; ?<br />
  119. Je pense que Turbogears a toujours été davantage populaire que Django quoi que tu en dises...<br />
  120. Pour trouver django je cherche &quot;django python&quot; sur google, pour turbogears &quot;turbogears&quot; et google.com/trends me dit que turbogears est légèrement plus populaire que Django. <a href="http://google.fr/trends?q=django+python%2C+turbogears" title="http://google.fr/trends?q=django+python%2C+turbogears" rel="nofollow">google.fr/trends?q=django...</a><br />
  121. <br />
  122. Et ce que tu dis pour Pylons: <br />
  123. «il s'agit de laisser le choix à l'utilisateur à chacun des niveaux pour l'utilisation de la bibliothèque existante qui lui convient.» s'applique également à TurboGears.<br />
  124. En effet avec TurboGears c'est par l'installation d'egg que le système se construit. Le système de template par défaut peut être remplacé par un autre tant que le plugin pour a été écrit, ça n'a rien de sorcier. Et d'ailleurs il existe plusieurs systèmes de template qui peuvent remplacer Kid (celui par défaut). Idem pour SQLObject. L'intégration de SQLAlchemy est plus complexe puisque ce dernier offre moins de &quot;magie&quot;, il faut coder une glue pour le rendre aussi simple d'utilisation.<br />
  125. Il n'y a pas eu d'erreurs dans le choix des composants comme tu le laisses entendre, seulement aujourd'hui émerge des composants encore plus intéressant. (SQLAlchemy, genshi et CherryPy3 n'existait pas au lancement de turbogears).</p>
  126. </div>
  127. </div>
  128. <div class="comment" typeof="schema:UserComments">
  129. <p class="comment-meta">
  130. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">01/04/2007</span> :
  131. </p>
  132. <div class="comment-content" property="schema:commentText">
  133. <p>@NiKo : oui :-)<br />
  134. <br />
  135. @bolo : je suis bien d'accord.<br />
  136. <br />
  137. @Bader : google trends est loin d'être représentatif je trouve. Se baser sur le nombre d'inscrits aux mailing-lists est plus intéressant :<br />
  138. Django : <a href="http://groups.google.fr/group/django-users/about" title="http://groups.google.fr/group/django-users/about" rel="nofollow">groups.google.fr/group/dj...</a><br />
  139. Turbogears : <a href="http://groups.google.fr/group/turbogears/about" title="http://groups.google.fr/group/turbogears/about" rel="nofollow">groups.google.fr/group/tu...</a><br />
  140. <br />
  141. Après ce que je dis pour Pylons/TG c'est surtout un résumé du billet en question.</p>
  142. </div>
  143. </div>
  144. <div class="comment" typeof="schema:UserComments">
  145. <p class="comment-meta">
  146. <span class="comment-author" property="schema:creator">Alex Conrad</span> le <span class="comment-date" property="schema:commentTime">05/07/2007</span> :
  147. </p>
  148. <div class="comment-content" property="schema:commentText">
  149. <p>pour votre information, l'émergeant web framework Pylons va désormais servir de base de développement pour le futur TurboGears 2.0.<br />
  150. <br />
  151. Voici quelques liens (en anglais)<br />
  152. <br />
  153. Annonces:<br />
  154. <a href="http://cleverdevil.org/computing/60/sprinting-to-turbogears-20" title="http://cleverdevil.org/computing/60/sprinting-to-turbogears-20" rel="nofollow">cleverdevil.org/computing...</a><br />
  155. <a href="http://groups.google.com/group/turbogears/browse_thread/thread/d1d2e416023e7033" title="http://groups.google.com/group/turbogears/browse_thread/thread/d1d2e416023e7033" rel="nofollow">groups.google.com/group/t...</a><br />
  156. <br />
  157. Voici le lien de la discussion suite à l'annonce (sur pylons-discuss):<br />
  158. <a href="http://groups.google.fr/group/pylons-discuss/browse_thread/thread/5b1edd907db72ac1" title="http://groups.google.fr/group/pylons-discuss/browse_thread/thread/5b1edd907db72ac1" rel="nofollow">groups.google.fr/group/py...</a></p>
  159. </div>
  160. </div>
  161. <div class="comment" typeof="schema:UserComments">
  162. <p class="comment-meta">
  163. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">05/07/2007</span> :
  164. </p>
  165. <div class="comment-content" property="schema:commentText">
  166. <p>Tout à fait, merci pour les liens, j'avais placé l'info sur ma home (dans la rubrique Ailleurs) avec les liens suivants :<br />
  167. <br />
  168. <a href="http://www.blueskyonmars.com/2007/06/27/turbogears-2-a-reinvention-and-back-to-its-roots/" title="http://www.blueskyonmars.com/2007/06/27/turbogears-2-a-reinvention-and-back-to-its-roots/" rel="nofollow">www.blueskyonmars.com/200...</a><br />
  169. <a href="http://www.oreillynet.com/onlamp/blog/2007/06/python_web_application_framewo.html" title="http://www.oreillynet.com/onlamp/blog/2007/06/python_web_application_framewo.html" rel="nofollow">www.oreillynet.com/onlamp...</a><br />
  170. <br />
  171. mais merci pour les nouveaux liens, c'est vrai qu'il fallait le préciser sur ce billet.<br />
  172. </p>
  173. </div>
  174. </div>
  175. </div>
  176. </section>
  177. <footer>
  178. <nav>
  179. <p>
  180. <small>
  181. Je réponds quasiment toujours aux <a href="m&#x61;ilto:d&#x61;vid%40l&#x61;rlet&#46;fr" title="Envoyer un email">emails</a> (<a href="/david/signature/" title="Ma signature actuelle avec possibilité de chiffrement">signés</a>) et vous pouvez me rencontrer à Montréal. <span class="more-infos">N’hésitez pas à <a href="/david/log/" title="Être tenu informé des mises à jour">vous abonner</a> pour être tenu informé des publications récentes.</span>
  182. </small>
  183. </p>
  184. </nav>
  185. </footer>
  186. </div>
  187. <script src="/static/david/js/larlet-david-3ee43f.js" data-no-instant></script>
  188. <script data-no-instant>InstantClick.init()</script>
  189. </body>
  190. </html>