Nouveauté de Django 1.6 : ENFINNNNNNNNNNNNN !
lundi 7 octobre 2013 à 12:19Django 1.6 est sur les rails, et il y a des changements que j’attends depuis 3 éternités dedans.
Support officiel de Python 3
Là, on pourra dire que Python 3 est crédible. Là, on peut commencer à faire du Python 3.
Après il restera toujours Python 2 par défaut sur certains OS, donc il y a encore du chemin. Je vous rappelle qu’Ubuntu avait prévu de migrer il y a 2 ans. LOL.
Template de projet simplifié
Enfin, un nouveau projet commence avec l’admin activée par défaut.
Enfin, la base de données est configurée par défaut pour utiliser SQLite. Ca qui signifie que Django marche VRAIMENT out of the box. Un débutant à juste à commencer à coder.
C’était le dernier gros bloc à mon sens pour permettre à quelqu’un de se lancer sans avoir à chercher à comprendre comment tout marche.
Des réglages de DB moins cons
Les transactions en Django, c’était cryptique. Maintenant c’est tout simplement de l’autocommit par défaut (configurable). Et si on veut avoir plein de queries dans une seule transaction :
with transaction.atomic(): query1() query2()
Putain, enfin !
Et en prime, on peut avoir une connexion persistante à la base de données et éviter des setups à base de psycopg2_pool. Je vais jouir.
Au passage, si vous lisez la doc sur les DB, c’est plus ou moins un appel à migrer de MySQL à PostGres si vous le pouvez. Maintenant il n’y a plus que des avantages.
Autre goodies : save()
fait maintenant une query au lieu de deux dans le cas d’un update. Alléluia mes frères !
Pour finir, on a un field pour stocker des données binaires brut en DB. Et la valeur de BooleanField
est None
(NULL
en DB) par défaut, et plus False
. Pas trop tôt…
Quelques bonbons
Ceux qui écrivent des backend d’authentification seront heureux d’apprendre que l’on pourra lever PermissionDenied
à tout instant pour se simplifier la vie.
Les amateurs de latest()
n’auront plus à faire un sort()
avant pour obtenir le premier élément, il suffit de faire earliest()
. Et on n’aura plus à faire un try/except
sur un filter()[0]
pour obtenir le premier élément, first()
permet de le faire (et last()
pour le dernier) et retournera None
si ça foire..
Certains fields de formulaire passent en HTLM5, par exemple EmailField
output type="email"
. Ah, les labels de forms contiennent maintenant une option suffix
, qui a pour défaut “:
“.
Les ModelForm
peuvent écraser le message d’erreur d’un champ, sans avoir à réécrire le champ. Des dizaines de lignes qui vont sauter, yes ! De plus il n’ont plus la grosse faille de sécurité qui supposait que tous les champs du modèle (y compris l’ID) étaient exposés si on ne précisait rien. Si vous voulez ce comportement, il faudra explicitement mettre fields = "__all__"
.