Sep 9 2010

Comment créer des sous-formulaires à partir d'un Model Django

Un petit article Python de temps en temps ne fait pas de mal, donc ici je vais détailler la manière  très simple d'utiliser les modèles Django pour créer des formulaires, mais aussi créer des sous-types de formulaire à partir du même modèle. Tout va s'expliquer :

Quand on créé un objet avec la couche de persistance de Django, on crée une nouvelle classe :

  1. class User(models.Model):
  2.         username = models.CharField(max_length=255)
  3.         password = models.CharField(max_length=255)
  4.         email = models.EmailField(max_length=255)
  5.         blog = models.URLField(verify_exists=False)
  6.         created_at = models.DateTimeField(auto_now=True, auto_now_add=True)
  7.  
  8.         def __unicode__(self):
  9.                 return self.username

Cette classe permet de gérer automatiquement les données base de données, la DAO, et quelques validations. Maintenant il n'est pas rare de vouloir lier un formulaire à un tel objet, pour gérer de simple CRUD. Rien n'est plus simple avec Django où il suffit d'écrire le code suivant (toujours dans models.py) :

  1. class UserForm(forms.ModelForm):
  2.         class Meta:
  3.                 model = User

Ce code complexe permet non-seulement de gérer les champs associés à l'objet User, mais il possède aussi une interaction facilitée avec tous les objets persistants, voilà quelques exemples d'utilisations :

  1.         # loading object
  2.         aUser = User.objects.get(id=id);
  3.         # using it to create a bounded form to this object
  4.         aUserForm = UserForm(instance=aUser)

On peut aussi récupérer une instance de formulaire à partir d'un submit en utilisant la commande :

  1.    form = UserForm(request.POST)
  2.     if form.is_valid():
  3.          #etc.

Cette validation permet d'obtenir un objet clean avant la sauvegarde. Maintenant même si tout cela est très intéressant, ces informations sont présentes de bases dans la documentation officielle de Django, et je vais plutôt approfondir un point. Comment créer un formulaire à partir d'un modèle qui n'affiche pas tous les champs du modèle ?

Le système est prévu aussi pour ça, il permet de créer des sous-formulaires en sélectionnant les champs à afficher, on peut donc créer deux formulaires différents, une simple et une avancée :

  1. class SimpleUserForm(forms.ModelForm):
  2.         class Meta:
  3.                 model = User
  4.                 fields = ('username', 'email', 'blog')
  5.  
  6. class AdvancedUserForm(forms.ModelForm):
  7.         class Meta:
  8.                 model = User
  9.                 fields =  ('username', 'password', 'email', 'blog')

Ces formulaires partiels peuvent ainsi servir à afficher l'objet ou permettre l'édition mais que sur certains champs.

Vale


Sep 5 2010

Création de modèles avec PySide/PyQt

Ça y est ! mon dernier article sur développez.com est terminé, relu, vérifié, contre-vérifié etc.

Alors si le développement rapide d'application vous intéresse ! Si vous avez envie de voir un autre paradigme que l'éternel MVC ! et enfin si vous avez des problèmes pour utiliser les composants MVD de Qt !

N'hésitez plus à aller lire cet article (promis, il n'y a pas de pub ad-sense) : http://ogirardot.developpez.com/creation-modeles-pyside/


Aug 28 2010

Dive Into Python 3 en Français ? Pourquoi pas ?

Voilà tout est dit, après avoir découvert et utilisé de nombreuses fois le très bon site http://diveintopython3.org/ tiré du livre de Mark Pilgrim distribué librement. J'ai eu l'idée, comme d'autres avant moi, de commencer à traduire ce très bon ouvrage.

Le travail a commencé et pour l'instant déjà deux contributeurs (Alexandre Grison et Jonathan Winandy) ont mis la main à la pâte pour avancer ce projet titanesque.

Toute aide est la bienvenue, et le dépôt Mercurial associé est ouvert sur BitBucket : http://bitbucket.org/ogirardot/diveintopython3-fr/wiki/Home.

Le travail ne manque pas et les relectures non-plus, donc si ca vous tente n'hésitez pas à me contacter sur Twitter : @ogirardot


Aug 26 2010

Introduction et prise en main de PyQt/PySide

Bonjour, j'ai peu bloggé ces temps-ci entre mes contributions pour Virgo, un sprint Django que je suis en train de finir, et mes rédactions d'articles pour développez.net. Pour me rattraper, j'ai décidé de vous faire partager le dernier de ces articles sur la prise des bindings Python pour Qt à savoir PySide/PyQt.

J'espère qu'il vous plaira : http://ogirardot.developpez.com/introduction-pyqt/


Oct 2 2009

Better web applications

Petit article sur un débat d'idées assez intéressant autour des Applications web et du meilleur framework/langage a utilisé. Je suis en simple spectateur compte tenu de mon poste actuel (très peu orienté Web) mais la conclusion sur Zope/Plone est assez intéressante et je ne manquerai pas de tester les deux lors de mes prochains projets Web.

J'apprécie surtout la conclusion sur Django et les URL en Regex que j'avais trouvé très puissante à l'époque, mais qui sont un calvaire à prendre en main et à débugger (comme toute les Regex...).

Je laisse le troll là où il a commencé pour moi sur le site :

http://linuxfr.org/~ploum/23607.html où déjà un certain nombre de participants se sont bien tapés dessus.

Et enfin le screen cast originel venant du JPL : Jet Propulsion Laboratory de la Nasa et plus précisemment de Sean Kelly dont je trouve les videos assez facile d'accès et stimulantes  !

Enjoy.

++