Django 1.2 au frigo
Django 1.2 alpha 1 a été publié hier et marque le début du gèle avec quelques fonctionnalités qui n’ont pas pu atterrir à temps dans le tronc (souvent pour de très bonnes raisons, ces gars sont des chefs ! Merci !). Vous pouvez jeter un coup d’oeil aux notes de publication
Protection CSRF
Pas mal de modifications en ces terres de sable mouvant. Si vous n’êtes pas intéressé par les détails il faut juste vous rappeler que par défaut vous aurez besoin de la tag csrf_token dans vos formulaires:
<form method="POST">{% csrf_token %} {# comme d'habitude ici #} </form>
Tag de template if
Plus besoin de grandes contorsions pour faire un peu de logiques d’affichage, la tag if est devenu super extra méga futée:
{% if mavar == "x" %} mavar est donc x. corollaire if(not)equal {% endif %} {% if mavar != "x" %} zut ! mavar n'est pas x {% endif %} {% if "bc" in "abcdef" %} Ben puisque "bc" est dans "abcdef" {% endif %}
Vous pouvez utilisez les autres opérateurs classiques (<, >, <=, >=) telle que vous les connaissez par ailleurs. Notez que ces opérateurs peuvent être combiné pour exprimer des expressions complexes, il faudra alors faire attention à la précédence des opérateurs puise que les parenthèses ne sont toujours pas acceptées dans les tags de template.
Formats locaux avec I18N
Il est maintenant facile d’accéder aux formats sensible à la configuration locale:
from datetime import datetime from django.utils import formats formats.date_format(datetime.now(), 'DATETIME_FORMAT') #u'Jan. 6, 2010, 9:22 a.m.' date_format = formats.get_format('DATE_FORMAT') datetime_format = formats.get_format('DATETIME_FORMAT') time_format = formats.get_format('TIME_FORMAT') date_format,datetime_format,time_format #('N j, Y', 'N j, Y, P', 'P')
MultiDB
Si vous avez besoin d’accéder à plusieurs bases dans votre application, rien de plus simple, Django à fait peau neuve pour le plaisir de vos doigts et de vos yeux. En lieu et place des paramètres de configuration que vous connaissiez déjà il suffit juste de mettre:
DATABASES = { 'default': { 'NAME': 'mabase', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'toto', 'PASSWORD': 'passerp0s' }, 'utilisateurs': { 'NAME': 'mabaseuser' 'ENGINE': 'django.db.backends.mysql', 'USER': 'nono', 'PASSWORD': 'passersurtoutp0s' } } # ET pour sauver dans la base mysql un objet par exemple: mon_obj.save(using='mabaseuser')
Les cas d’utilisation sont légions, vous pouvez par exemple songer à une base répliquée en temps réel où les répliquât seraient utilisés comme base de lecture pour désengorger la base principale, vous pouvez aussi songer au sharding et autres bases de données hérités. Toute les API autour de l’ORM se sont mis sur leurs 31, 5 jours après la saint-sylvestre pour l’accueil de multidb pour votre grand plaisir.
Autres gâteries
- Validation de modèles (utilisable en l’état avec les ModelForm)
- Les modèles peuvent utiliser un BigInt 64 bit
- Un bon raccourcis de sortie lorsque les tests rencontrent un pépin: Lève vite le camp !
- Cache des templates
- Votre EmailBackend si vous voulez faire vos trucs à vous
- Le framework des Messages juste pétillant
- Champs en lecture seul dans l’admin
- … Et bien d’autres délires encore plus chanmé …
Le Bébé est attendu le 09/03/2010, merci à tous de tester et de remonter les anomalies constatées.
Wouaaww!! q de bonnes choses.. :) un vrai régal. j’utilise la 1.1 sur ma machine de dev. et dans projets déjà déployés. je ne veux pas upgrade le django de ma machine de dev, sinon je serai obligé d’upgrade le code des projets en 1.1 aussi ; ce qui ne m’arrange pas puisq je veux garder le meme code qui est déployé chez le client ! questions : est-il possible de faire cohabiter 2 versions de django différentes ?… puis, de lancer certains projet avec la version A et d’autres avec la version B ? (je sais, ça un air c’est un peu déjanté :D… mais il faut bien “oser demander l’impossible” aprs toute ces bnes news). merci pour les lumières !
Commentaire par djibril — 07/02/10 11:42 | # - re