title:      Comparaison de TurboGears et Django, deux frameworks web Python
slug:       comparaison-de-turbogears-et-django-deux-frameworks-web-python
date:       2006-07-15 02:10:19
type:       post
vignette:   images/logos/turbogears_django.png
contextual_title1:  Le langage de template Django : Pour les auteurs de templates
contextual_url1:    20060815-le-langage-de-template-django-pour-les-auteurs-de-templates
contextual_title2:  Rédaction de votre première appli Django, partie 4 : Conception d&#39;un formulaire et vues génériques
contextual_url2:    20060617-redaction-de-votre-premiere-appli-django-partie-4-conception-d-un-formulaire-et-vues-generiques
contextual_title3:  Rédaction de votre première appli Django, partie 3 : Création des vues de l&#39;interface publique
contextual_url3:    20060617-redaction-de-votre-premiere-appli-django-partie-3-creation-des-vues-de-l-interface-publique

<p>Entre deux <a href="https://larlet.fr/david/biologeek/archives/20060617-traduction-francaise-de-la-documentation-de-django-le-framework-web-python/">traductions de tutoriels pour Django</a>, j'ai décidé de traduire ce <a href="http://www-128.ibm.com/developerworks/linux/library/l-turbogears/#N10403">petit comparatif</a> qui fait suite aux articles d'introduction à ces frameworks web publiés sur le site d'IBM (<a href="http://www-128.ibm.com/developerworks/linux/library/l-django/">partie 1 consacrée à Django</a> et <a href="http://www-128.ibm.com/developerworks/linux/library/l-turbogears/">partie 2 à TurboGears</a>). Je trouve que c'est l'un des plus objectifs qui m'ait été donné de lire et il est à ce titre intéressant pour ceux qui sont dans le doute et/ou curieux.</p>

<p><a href="http://www.djangoproject.com/">Django</a> et <a href="http://www.turbogears.org/">TurboGears</a> sont deux frameworks de type <abbr title="Modèle Vue Contrôleur">MVC</abbr> qui permettent de développer des sites Web de manière agile et rapide en utilisant le langage Python. De façon à choisir celui qui répondra le mieux à vos besoins, voici quelques différences à connaître&nbsp;:</p>


<h2>Historique</h2>


<p>Les deux projets, tout comme Ruby on Rails, sont issus d'applications existantes ayant été ensuite «&nbsp;libérées » pour la communauté Open Source. Django est plus vieux et provient, à la base, d'un journal en ligne qui sert des millions de pages par jour. TurboGears est issu du développement d'un client riche, une application de lecture de flux <abbr title="RDF Site Summary">RSS</abbr> qui est toujours en développement. Par rapport à Django, TurboGears est davantage guidé par la communauté car il utilise de nombreux composants open-source pré-existants.</p>


<p>Les origines différentes de chaque projet ont mené à des priorités différentes lors du développement. L'équipe de Django, venant du monde en constante évolution du journalisme en ligne, s'est focalisée sur un framework permettant de bâtir rapidemment des applications facilement modifiables et basées sur du contenu. L'équipe de TurboGears, avec ses origines de produit-consommateur, s'est dirigée vers des applications client riches et une architecture modulaire.</p>


<h2>URLs</h2>


<p>Le mécanisme de gestion des requêtes de Django correspond aux contrôleurs de classes et aux noms de méthodes. Dès que vous ajoutez une nouvelle classe ou une nouvelle méthode, la nouvelle URL est immédiatement disponible. Si vous avez besoin de changer le chemin qui execute un contrôleur donné, vous devez modifier la structure de votre code. Réciproquement, Django utilise un fichier de configuration indépendant basé sur des expressions rationnelles. Celui-ci fait correspondre les URLs au code, découplant la structure des URLs de l'implémentation.</p>


<p>Le système de TurboGears est plus rapide à mettre en place que celui de Django, puiqu'il ne nécessite qu'un simple décorateur pour rendre les nouvelles pages disponibles. Par contre, le système de configuration de Django permet un contrôle et une flexibilité totale. Les URLs de Django peuvent être facilement rétablies pour une application après un réarrangement majeur du code. Cela permet de prévenir les liens morts causés par les anciens favoris ou le cache des moteurs de recherche. Les liens morts sont à l'origine d'une baisse du traffic et de l'utilisabilité des sites basés sur du contenu auxquels Django est destiné.</p>


<h2>Réutilisation du code</h2>


<p>L'équipe de TurboGears appelle leur projet un méga-framework pour rendre limpide le fait que <abbr title="TurboGears">TG</abbr> est issu de composants existants. L'équipe de TurboGears sélectionne et incorpore le meilleur code source diponible au lieu de tout réécrire à partir de rien. L'un des bénéfice du framework TurboGears est, qu'étant un méga-projet, il dispose d'une méga-communauté. <abbr title="TurboGears">TG</abbr> est devenu un puissant catalyseur, augmentant l'intérêt et la motivation pour les projets formant le cœur de TurboGears.</p>


<p>À l'inverse, Django a été créé en 2003 lorsque l'état des composants Python existants n'était pas aussi avancé que ce qu'il est aujourd'hui. Le framework Django a été créé à partir de rien, et le resultat est un framework stable qui est utilisé pour de nombreux sites qui gèrent des millions de clics par jour. Toutefois, certains avancent que le projet Django souffre du syndrome du <abbr title="Not Invented Here">NIH</abbr> (réinvention de la roue) en raison de son manque de réutilisation du code. La position de l'équipe de Django est que le travail nécessaire pour créer un framework en Python à partir de rien n'est pas plus important que celui d'adapter les composants existants ensemble et que le résultat est un framework uniformisé et cohérent.</p>


<h2>JavaScript</h2>


<p>TurboGears a donné à la bibliothèque JavaScript MochiKit une position de premier choix au sein de son framework. L'équipe a aussi créé une bibliothèque de composants qui permet l'utilisation étendue du JavaScript pour créer des éléments d'interfaces «&nbsp;enrichies ». Cela montre l'importance attribuée au développement de clients riches (Ajax) dans le monde de TurboGears. L'équipe de Django n'a pas choisie de bibliothèque JavaScript particulière inclue dans leur framework par défaut mais a discuté de cette possibilité (<abbr title="Note du Traducteur">NdT</abbr>&nbsp;: c'est <a href="http://code.djangoproject.com/wiki/AJAX">toujours en cours de discussion</a>). Aucun des projets ne vous restreint, d'aucune façon que ce soit, à utiliser la bibliothèque JavaScript de votre choix.</p>


<h2>Outils d'administration</h2>


<p>Les deux projets ont une interface d'administration. L'outil d'aministration de Django est destiné à l'utilisateur final qui a besoin d'une interface ergonomique d'insertion des données ne nécessitant pas d'être modifiée à chaque ajout de nouvelle fonctionnalité. En revanche, l'outil d'aministration de TurboGears est destiné aux développeurs. Elle leur permet d'avoir accès à divers outils dont un visualisateur et un éditeur de base de données basiques.</p>


<h2>Licence</h2>


<p>Du fait que Django soit parti de rien, l'intégralité du projet est sous une unique licence open source (le licence BSD). TurboGears, issu de plusieurs projets, a plusieurs licences. SQLObject, l'outil d'<abbr title="Object Relational Mapping">ORM</abbr>, est protégé par la <abbr title="Lesser General Public License">LGPL</abbr>, qui stipule que chaque modification directe de SQLObject doit être restituée à la communauté du projet. La licence ne nécessite pas que les application l'utilisant soient open source. Néanmoins, certaines sociétés n'acceptent pas l'utilisation de logiciels sous <abbr title="Lesser General Public License">LGPL</abbr>. Dans ce cas, vous pouvez utiliser SQLAlchemy, un autre outil d'<abbr title="Object Relational Mapping">ORM</abbr> bénéficiant d'un support important au sein de la communauté de <abbr title="TurboGears">TG</abbr>.</p>


<h2>Exemples concrêts</h2>


<p>Consultez la liste des <a href="http://code.djangoproject.com/wiki/DjangoPoweredSites">sites propulsés par Django</a> et <a href="http://trac.turbogears.org/turbogears/wiki/SitesUsingTurboGears">TurboGears</a>. Ces applications en ligne témoignent de ce qui peut être fait avec chacun de ces outils.</p>


<h2>Bonus</h2>


<p>On n'est plus dans la traduction mais si vous vous intéressez aussi à <abbr title="Ruby on Rails">RoR</abbr> je vous recommande <a href="http://www.djangoproject.com/snakesandrubies/">cette vidéo</a> qui date un peu (donc les exemples sont légèrement obsolètes) mais qui se termine par une séance de questions/réponses intéressante et plutôt marrante (pour les geeks). De toute façon, maintenant qu'on sait que <a href="http://wiki.rubyonrails.com/rails/pages/Framework+Performance">Django est plus performant que Rails</a>... je ne vois plus trop d'intérêt à apprendre le ruby ;-).</p>
