title:      Sortie de Django 1.0, une année de nouveautés
slug:       sortie-de-django-10-une-annee-de-nouveautes
date:       2008-09-02 10:34:49
type:       post
vignette:   images/logos/django_.png
contextual_title1:  Scrum, Python et Django à Montpellier
contextual_url1:    20091014-scrum-python-et-django-montpellier
contextual_title2:  Son propre TinyURL en Python et HTML5 avec webpy
contextual_url2:    20090221-son-propre-tinyurl-en-python-et-html5-avec-webpy
contextual_title3:  ★ Conférences Django pour PyCon fr
contextual_url3:    20080521-conferences-django-pour-pycon-fr

J'étais assez sceptique lors de l'[annonce de la roadmap avant l'été](https://larlet.fr/david/biologeek/archives/20080616-django-1-0-nom-de-code-arlesienne/) mais il faut bien avouer que ça n'a pas chômé pendant ces vacances et que les développeurs sont arrivés à bout des fonctionnalités annoncées. *Chapeau bas.* Je ne vais pas faire un inventaire exhaustif des nouveautés (je vous laisse consulter [la page dédiée](http://docs.djangoproject.com/en/dev/releases/1.0/)) mais plutôt une liste des ajouts vraiment intéressants au quotidien au cours de cette dernière année.

## Support complet de l'Unicode

Mergée [l'été dernier](http://code.djangoproject.com/changeset/5609), le nom de cette branche est assez explicite. Terminés les problèmes de [charset/encoding](http://sebsauvage.net/python/charsets_et_encoding.html) lorsqu'on a des données propres, sinon iconv est votre ami.

## Commandes personnalisées

La refactorisation des commandes internes de Django permet [depuis un an](http://code.djangoproject.com/changeset/5898) d'ajouter très facilement des commandes personnalisées à votre projet. Vous pouvez par exemple voir ce que ça donne sur le [script qui récupère les flux affichés](http://code.biologeek.com/file/4e25f872a753/contextual/management/commands/crawlfeeds.py) dans la sidebar de ce site.

## Échappement des variables dans les templates

Changement de la politique de sécurité en [novembre dernier](http://code.djangoproject.com/changeset/6671) avec les variables échappées par défaut. Selon les cas, ça peut être pénible pour les mises à jour mais c'était à mon avis utile pour permettre aux débutants de ne pas faire trop d'erreurs à ce niveau. Il est toujours possible de contourner cette restriction via le filtre `|safe` ou le tag `autoescape` (great power, great responsabilities, tout ça).

## Refactorisation des querysets

[Fin avril](http://code.djangoproject.com/changeset/7477), un énorme boulot est effectué en interne afin de corriger pas mal de bugs récalcitrants, ça permet (entre autres) d'ordonner plus facilement les querysets, de spécifier les champs couverts par un `select_related`, d'optimiser la façon de filtrer les résultats, de mettre à jour plusieurs instances d'un coup et surtout, le retour de l'héritage au niveau des modèles !

## Modifications dans l'upload de fichiers

[Début juillet](http://code.djangoproject.com/changeset/7814), ça commence à s'accélérer, il est maintenant possible de lire les fichiers uploadés partie par partie. Ça n'a l'air de rien mais selon les types de fichiers sur lesquels vous travaillez ça peut vraiment faire la différence.

## Nouvelle administration utilisant les newforms

C'est LA fonctionnalité qui donne à mon avis à Django une longueur d'avance sur les autres frameworks. [Ajoutée mi-juillet](http://code.djangoproject.com/changeset/7967), cette branche permet de générer une interface d'administration qui tient compte des droits utilisateurs, qui est vraiment flexible et customisable. L'interface qui était réservée aux personnes de confiance (administrateur) peut maintenant être utilisée pour développer un site complet. Le problème c'est qu'à partir de cette date là, avec les vacances et les commits qui s'accélèrent il devient plus prudent d'attendre la 1.0 et cette fonctionnalité n'a pas eu la promotion qu'elle méritait à mon avis. Cela dit il est temps de tester sa puissance maintenant, je joue avec depuis quelques jours et c'est vraiment du bonheur.

## Ajout du support géographique

[GeoDjango](http://geodjango.org/) est [enfin ajouté dans les contrib](http://code.djangoproject.com/changeset/8219), très beau projet avec énormément de fonctionnalités indispensables lorsque vous commencez à vouloir savoir qui habite près de qui, quelle est la distance parcourue, etc.

## Refactorisation des stockages de fichiers

Bon celui là c'est [un peu mon chouchou](http://code.djangoproject.com/changeset/8244) car je l'ai testé à plusieurs reprises pour faire des retours à [Marty Alchin](http://gulopine.gamemusic.org/) et ça m'a mené à partager certains [storages utiles pour Django](http://code.larlet.fr/doc/#django-storage). Il permet par exemple de stocker ses fichiers en local pour du développement et sur S3 pour de la production ou n'importe quelle combinaison possible et imaginable.

## Nouveau système de commentaires

[Pour finir](http://code.djangoproject.com/changeset/8557), ce qui était attendu depuis... toujours, un GSoC est arrivé à terme ! Les commentaires ont été entièrement réécrits, j'utilise une version alpha de cette implémentation et je ne sais pas si je mettrais à jour, peut-être à l'occasion mais elle a l'avantage de ne pas être standard et pour lutter contre le spam on ne fait pas mieux ;-).

Enfin, il y a eu pas mal de ménage de fait sur d'anciennes parties de code (suppression des oldforms/validators entre autres), ce qui le rend plus facilement maintenable et une [nouvelle documentation](http://docs.djangoproject.com/en/dev/) propulsée par [Sphinx](http://sphinx.pocoo.org/) (l'outil qui mériterait un petit système de tickets pour être tout à fait parfait). **Que du bon.** De mon côté, on peut pas dire que j'ai vraiment avancé sur mes tickets, j'ai pas mal discuté de l'intérêt de l'[utilisation du tag url dans blocktrans](http://code.djangoproject.com/ticket/7239) et au final la solution est venue [presque par hasard](http://groups.google.com/group/django-developers/browse_thread/thread/5e9d28a878091346) ! J'ai pas eu le temps de m'occuper de tout ce qui était relatif à la séparation des tests mais j'ai mis à jour les traductions (ce qui représentait un sacré boulot, heureusement que j'ai eu de l'aide de [la team fr](http://www.django-fr.org/contributeurs/)).

Une année riche en nouveautés qui montre le dynamisme du framework, la 1.0 n'était qu'une étape nécessaire permettant de partir d'une base saine. Il y a encore 2/3 choses qui méritent d'être remises à plat pour la 1.1 mais sinon c'est clairement positif. Avec de telles fondations, il devient de plus en plus facile de développer son projet parfait, en tenant les délais ;-). Il ne manque plus que la sortie de Starcraft 2 pour faire le grand chelem...

**PS : ça sort dans quelques heures, un peu de patience, je le publie maintenant suite à une petite erreur de ma part. En attendant qu'est-ce qui vous pousse/retient d'utiliser cette version ?**

**[edit du soir]** : bon finalement ça commence par [une faille de sécurité](http://www.djangoproject.com/weblog/2008/sep/02/security/) qui sera suivie d'une RC1.

**[edit du 4 septembre, 1h47]** : sortie de la [version 1.0](http://www.djangoproject.com/weblog/2008/sep/03/1/). Enfin.

La [page officielle de migration](http://docs.djangoproject.com/en/dev/releases/1.0-porting-guide) est un bon début si vous n'êtes pas à jour.
