Le langage de programmation
Python a été créé en 1991 par un programmeur Hollandais du nom de
Guido van Rossum, dans le but de créer facilement des scripts d'administration pour le système d'exploitation Amoeba. Ce nom de langage vient en réalité des
Monty Python, une troupe d'acteurs britanniques bien connus pour leurs sketchs, séries et films comiques, dont Guido van Rossum était un grand fan. Depuis cette époque, Python a évolué : de la version 0.9.0 sortie en 1991, nous avons maintenant atteint la version 2.5.2 du langage Python, et la prochaine version majeure, Python 3.0, devrait sortir dans les semaines à venir. Le langage a évolué, et ses utilisations avec : de son rôle de langage de script pour les administrateurs système, il est maintenant un langage capable de réaliser des interfaces graphiques, des jeux ou des sites Web. En effet, de nombreuses entreprises l'adoptent de plus en plus : il est notamment utilisé par Google (chez qui Guido van Rossum travaille maintenant), Adobe ou même des sociétés spécialisées comme Logilab.
Cependant, pour beaucoup de gens, le rôle de Python se limite au développement de scripts et d'interfaces graphiques. Que nenni ! Sa place devient de nos jours de plus en plus importante dans le développement web. Ses débuts ont tout d'abord été par le biais de scripts CGI (
un tutoriel de krankkatze en parle notamment), puis les développeurs Python se sont aperçus que cette approche n'était pas la bonne : en effet, l'utilisation d'un script CGI favorise le mélange entre code et affichage, ce qui empêche de modifier facilement l'une ou l'autre de ces deux parties indissociables formant un site web dynamique. C'est ainsi que des programmeurs Python ont commencé à écrire de nombreux
frameworks de développement web. Les trois plus connus sont
Zope, très utilisé en entreprise et dans le monde professionnel du fait de son ancienneté et de sa stabilité,
Turbogears, plutôt minoritaire mais très prometteur, et enfin
Django, celui dont je vais parler dans cette news, qui monte de plus en plus en puissance et qui se fait de plus en plus connaître au fil du temps.
La dernière version de Django, de numéro 0.96, est sortie en mars 2006. Elle n'apportait pas de vraies nouveautés aux développeurs, sauf l'assurance d'avoir des bases solides qui ne bougeraient pas pour au moins une année. Mais aujourd'hui vient de sortir la dernière mouture de ce framework web : Django 1.0. Attendue depuis plus d'un an, cette version casse totalement certaines fondations de Django pour les rendre plus efficaces et plus pratiques à utiliser pour le développeur. Ainsi, un site développé pour Django 0.96 ne fonctionnera pas avec Django 1.0 : c'est pour cela que le numéro de version 0.97 n'a pas été choisi pour cette nouvelle version très innovante au niveau du web en Python.
Django, un framework web ?

Comme je l'ai déjà expliqué sommairement en introduction, ces frameworks sont là pour remplacer l'utilisation de Python en tant que script CGI qui n'était pas adapté au développement de gros sites internet dynamiques. En effet, utiliser des scripts CGI impose une chose : comme on le fait en PHP, une page est représentée par un script, qui s'occupera lui-même de récupérer les données envoyées par l'utilisateur et de lui renvoyer une page HTML ou une image par exemple. Cette approche est tout à fait pratique quand on réalise un script rapidement constitué d'une ou deux pages, mais devient rapidement impossible à gérer quand il s'agit de faire un site complet, un système d'administration, etc. De plus, par défaut, rien n'est géré par un script CGI et tout doit être reprogrammé par le développeur web : par exemple, la gestion des sessions, qui peut ne pas être facile pour un débutant. Ainsi, cette utilisation de CGI était réservée aux connaisseurs du langage et des standards impliqués (le
protocole HTTP et la
norme CGI, par exemple).
Model, View, Controller
Les frameworks Web sont des bibliothèques de code réutilisable pour plusieurs sites qui vont gérer différents aspects compliqués ou répétitifs de la création d'un site web. La plupart de ces frameworks offrent à l'utilisateur (ou l'y obligent) à utiliser un modèle de développement que l'on appelle
MVC. Ce modèle sépare trois parties distinctes d'un site web :
- Les modèles : ce sont les données que votre site manipule et qui seront la plupart du temps stockées en base de données. Par exemple, un blog pourrait manipuler trois modèles : un modèle représentant un article de blog (qui contient un titre, un texte, une date de publication et différents mots-clés), un autre représentant un commentaire d'article (qui est lié à un article, et contient un titre, un auteur, un texte et une date de publication), et le dernier représentant un mot-clé (qui a un nom et une liste d'articles associés). On peut ainsi très facilement manipuler les données de façon totalement transparente pour le développeur : en effet, ces modèles sont des interfaces vers, par exemple, une base de données ou un fichier, alors qu'on les manipule sans s'en préoccuper.
- Les vues : elles ont le rôle d'utiliser les données qu'on leur fournit pour les transformer sous une forme claire et compréhensible pour l'utilisateur, et lui renvoyer ensuite. Par exemple, pour notre exemple de blog, on aurait une vue « un_article » qui prendrait en paramètre un de nos articles (sous la forme de son modèle), et qui renverrait une page XHTML valide avec toutes les informations voulues. Ces vues sont bien souvent assistées par un moteur de templates, qui permet lui de s'abstraire du code, et de réaliser des choses comme ceci :
Code : HTML & Django1
2
3
4
5 | <html>
<head>
<title>{{ article.titre }}</title>
</head>
...
|
Notre template sera ensuite analysé par un moteur de templates, qui transformera « article.titre » en sa vraie valeur dans le code XHTML.
- Le contrôleur : c'est le dernier composant de ce trio gagnant, dont le but est de faire le lien entre les vues, les modèles, et les requêtes de l'utilisateur. À chaque demande de page de la part de l'utilisateur, il va analyser l'adresse de la page demandée, la faire correspondre à une vue, et renvoyer le résultat de cette vue. C'est en gros « l'intelligence » du framework web, qui va réaliser un rôle très important.
Et Django dans tout ça ?
Comme vous l'avez appris (ou pas) dans l'introduction de cette news, Django est un framework web qui vous permet de réaliser des sites Web en Python très facilement, en obligeant le développeur à utiliser le modèle MVC, forçant ainsi à s'organiser plus que dans des langages comme PHP par exemple. Il a cependant de nombreuses particularités qui le différencient du gros des frameworks web :
- Il est totalement orienté objet. Cela permet une organisation du code plus efficace et une représentation plus aisée des différents composants : ainsi, un modèle est par exemple tout simplement une classe dont les instances pourront être stockées ou récupérées depuis une base de données. Les templates sont également des objets à part entière, pouvant être modifiés et redéfinis au besoin du développeur.
- Il contient un moteur de templates très puissant par rapport à la normale, supportant par exemple des fonctionnalités telles que le template inheriting (en français : héritage de templates). Comme en orienté objet, on peut ainsi créer des templates qui seront ensuite spécialisés par la suite, via la redéfinition de blocs spéciaux dans le template. Mis à part cela, son système de templates est très sécurisé, empêchant par défaut les attaques de type XSS sur vos sites Web. Il supporte évidemment toutes les fonctionnalités de base des templates, comme les conditions, les boucles et les fonctions. Cependant, ce moteur de templates est totalement extensible selon les besoins du site, permettant de rajouter facilement de nouveaux tags et filtres à ceux déjà existants.
- Il contient une interface d'administration automatiquement générée : au fur et à mesure que vous rajouterez vos modèles, l'administration intégrée à Django s'actualise, vous permettant de rajouter ou de modifier les données gérées par votre site web de manière aisée et uniforme, sans avoir besoin de créer vous-même votre propre interface d'administration. Elle est de plus totalement personnalisable selon les besoins de tous, et possède de nombreuses fonctionnalités utiles telles que l'historique des actions ou les permissions par utilisateur.
- L'internationalisation, le fait de fournir un site en plusieurs langages selon l'utilisateur, est directement gérée dans Django en utilisant des outils reconnus dans le domaine tel que le bien connu gettext. La traduction d'une application se fait extrêmement facilement : il suffit de marquer les chaînes à traduire en les entourant de _("...") dans vos fichiers Python, ou en utilisant le tag {% trans "..." %} dans les templates. La gestion des pluriels est également incluse, permettant de traduire différemment une phrase selon un nombre.
- Tout ce qui est faisable en Python l'est également avec Django : ce langage est notamment doté de nombreuses bibliothèques de génération d'images ou de documents tels que des PDF, qui sont donc utilisables directement dans votre site Web. Un autre exemple est celui du colorateur de code Pygments (utilisé sur le Site du Zéro), utilisable uniquement en Python, qui vous permet en une ligne de colorer du code source pour l'afficher sur votre site web.
- Enfin, le développement avec Django est extrêmement rapide : en effet, ce framework simplifie la vie de l'utilisateur pour de nombreuses choses. Combinant la puissance du langage Python et l'exhaustivité de Django, le développement d'un site web est tout simplement un jeu d'enfant : il n'est pas rare de trouver sur Internet des vidéos-tutoriels « Faites votre blog en 20 minutes avec Django » ou « Un wiki en 30 minutes avec Django et Markdown ». D'ailleurs, le slogan de Django (« The web framework for perfectionnists with deadlines », soit « Le framework web pour les perfectionnistes ayant des contraintes (de temps par exemple) ») montre bien la volonté de rapidité du développement.
Les nouveautés de cette version
Un cassage de la compatibilité ascendante
Ce qu'on appelle en informatique la
compatibilité ascendante, c'est le fait de pouvoir réutiliser son travail fait avec d'anciennes versions en utilisant une nouvelle version de l'outil. Lors du passage de Django 0.96 à Django 1.0, les développeurs ont choisi de casser cette compatibilité : en d'autres termes, un site qui fonctionnait avec Django 0.96 ne fonctionnera plus avec Django 1.0. Cela peut sembler être une décision irréfléchie, mais elle était en fait nécessaire pour permettre aux développeurs de Django de retravailler depuis la base et de modifier des erreurs de jeunesse du framework.
En l'occurrence, les modifications nécessaires pour rendre un site compatible avec Django 1.0 ne sont pas extrêmement importantes : même si de nombreux composants ont été modifiés, les concepts de base de Django restent identiques : ainsi, tout n'est pas à refaire différemment. Les principaux changements non compatibles concernent l'interface d'administration, les formulaires automatiques, les vues génériques et le module de commentaires intégré. Tous ces changements sont expliqués sur la page
Porting your apps from Django 0.96 to 1.0 de la documentation officielle.
Les résultats de ce long travail
Voyons une liste des principales modifications ayant été apportées à Django méritant ce numéro de version « 1.0 » :
- Les méthodes indiquées comme déconseillées dans Django 0.96 ont été définitivement retirées du framework, les rendant ainsi inutilisables. Pour information, une fonction dépréciée signifie qu'elle ne doit plus être utilisée, par exemple parce qu'une nouvelle fonction plus puissante et réalisant le même travail a été créée. C'est le cas du module django.forms, remplacé par le module précédemment nommé django.newforms, renommé pour l'occasion.
- Les templates sont automatiquement protégés contre les attaques de type XSS, en échappant automatiquement toute variable affichée via le moteur de template. Une variable peut être notée comme sûre en utilisant le filtre safe, de la façon suivante : {{ variable|safe }}
. Cette sécurité peut être totalement désactivée en rajoutant au début du code un tag {% autoescape off %}
.
- Toute la partie administration automatisée a été reprogrammée pour utiliser le nouveau module de gestion des formulaires. De ce fait, elle est beaucoup plus puissante et personnalisable pour l'utilisateur. De plus, la personnalisation de l'administration se fait (contrairement à Django 0.96) hors du code des modèles, ce qui permet de séparer encore plus les différentes parties indépendantes du code. Cette nouvelle administration corrige de nombreux problèmes de personnalisation des versions précédentes qui étaient par exemple trop rigides pour modifier totalement les formulaires en fonction du modèle en cours d'édition.
- L'unicode est maintenant géré par défaut par le framework. Pour ceux qui ne connaissent pas unicode, c'est un standard de représentation des caractères qui permet d'écrire aussi bien des lettres de notre alphabet que des signes chinois ou des notes de musique. Cela en fait un outil très puissant pour l'internationalisation : en effet, c'est une chose de moins à gérer pour le développeur, sans compter que les problèmes d'encodage et de représentation de caractères sont très souvent difficiles à résoudre.
- Tout le système d'upload de fichier a été réécrit pour pouvoir utiliser différents backends de stockage de fichiers : cela vous permet par exemple de spécifier si vous voulez sauvegarder vos fichiers sur votre disque dur, dans une base de données, ou pourquoi pas même l'envoyer directement par email à l'upload sans le stocker
. Tout cela passe par la réimplémentation d'une classe Storage qui sera utilisée par Django pour stocker les fichiers.
- Django est maintenant utilisable avec Jython. Cela permet de mélanger du code Java et du code Python dans une application Django, mais également de servir des applications Django directement sur un serveur Java comme Tomcat ou JBoss. En effet, Jython est une implémentation de Python basée sur la JVM, permettant ainsi une interopérabilité entre ces deux langages.
- L'Object Relationnal Mapping (aussi nommé ORM) a été amélioré dans cette version de Django : c'est en fait le composant permettant de faire le lien entre vos modèles et votre base de données, transformant les accès aux attributs de votre objet en requêtes SQL. Ce travail permet de nombreuses choses pour les développeurs de modèles, par exemple l'héritage de modèles ou la modification du champ OneToOneField. Ses performances ont également explosé avec l'amélioration des jointures automatiques. Le développeur peut également choisir à la sauvegarde d'un objet s'il souhaite mettre à jour l'objet précédemment sauvegardé en base de données (comportement par défaut) ou créer une nouvelle copie de cet objet dans la base.
Trois captures d'écran de l'interface automatisée d'administration de Django. Merci à eldalion pour les screenshots
.
Où apprendre Django, et où l'utiliser ?
Une version encore très jeune
La sortie de la version 1.0 de Django datant d'il y a moins d'une journée, très peu de documentations sont actuellement à jour : en effet, personne n'a encore eu le temps de modifier ses documentations. Ainsi la seule documentation Django sur laquelle vous pouvez compter est celle du site officiel, qui est bien entendu adaptée à la dernière version du framework web. Cependant, peu de changements incompatibles ont été réalisés entre les versions 0.96 et 1.0 : de ce fait, de nombreuses documentations sur Django 0.96 sont encore valables, mais à adapter selon les cas. Mixer une documentation non officielle sur Django 0.96 et la documentation officielle semble être le meilleur compromis à l'heure actuelle. Malgré tout, la communauté Django est suffisamment importante pour qu'on puisse espérer voir rapidement de nombreux tutoriels fleurir sur Internet.
De nombreuses ressources pas à jour mais utilisables
On trouve sur Internet de nombreux sites et tutoriels consacrés à Django 0.96. En voilà une liste non exhaustive :
- [FR] Django de zéro : vos projets Python sur le web ! Et oui, un tutoriel Django est disponible sur le Site du Zéro
. Il a été écrit par Skaz et n'est pas encore fini, l'auteur attendant la sortie de la version 1.0 pour le mettre à jour et le continuer. On peut donc s'attendre à le voir évoluer et s'améliorer dans les semaines à venir.
- [EN] Le Django book. C'est une référence dans le domaine, presque plus complet que la documentation officielle et sous la forme d'un livre consultable sur Internet. Il est également vendu en édition papier, et une traduction en français de son contenu est en cours.
- [FR] Django-fr.org. Tout simplement le site officiel de la communauté Django française, contenant une traduction partielle de la documentation de Django 0.96 en français, et notamment de ses tutoriels. À ne pas rater si vous comptez apprendre Django
.
De nombreux autres sites sont disponibles sur la toile pour l'apprentissage de Django, mais ces trois sites ont tout particulièrement attiré mon attention. N'oubliez tout de même pas de vérifier sur le site officiel en cas de problèmes de compatibilité entre les deux versions de Django.
Où faire héberger son site ?
Tout d'abord, le wiki de Django tient à jour une
liste d'hébergeurs permettant l'utilisation du framework pour son site. Dans cette liste, je vous recommande le très bon
Alwaysdata, hébergeur français, proposant une offre gratuite (ce sont les seuls dans ce cas) permettant l'utilisation de Python, PHP et virtuellement tout langage web, malgré son faible espace disque pour le pack gratuit (10 Mo). Cependant, vous pouvez tout à fait héberger le code de votre site chez Alwaysdata et les données chez un hébergeur externe de plus grande capacité de disque dur

. Le support y est très bon, et une documentation est disponible pour vous aider à installer votre site. Notez d'ailleurs que le site d'alwaysdata est lui-même codé avec Django

.
Liens relatifs
Pour résumer cette news, Django 1.0, c'est 2000 bugs résolus, 450 000 lignes de codes modifiées, ajoutées ou supprimées, 40 000 lignes de documentation rédigées, et cela sur 530 jours de développement pour sortir comme prévu (avec cependant deux jours de retard) la dernière mouture de Django, améliorant de nombreux points négatifs des versions précédentes, tout en améliorant les performances. Cependant, gardez à l'esprit qu'un site fait pour une version précédente de Django ne fonctionnera pas avec la version 1.0 du framework

.