L’expérience est une lanterne que l’on porte sur le dos et qui n’éclaire jamais que le chemin parcouru. Confucius

Aller au contenu | Aller au menu | Aller à la recherche

mardi, 4 mars 2014

Chainer les requêtes Django


from datetime import datetime
from django.db.models import Manager
from django.db.models.query import QuerySet
class TodoMixin(object):
def is_done(self):
return self.filter(done=is_true))
#ecrire ici vos nouvelles méthodes
def order_by_user(self):
return self.order_by(user)
class TodoQuerySet(QuerySet, TodoMixin):
pass
class TodoManager(Manager, TodoMixin):
def get_query_set(self):
return TodoQuerySet(self.model, using=self._db)
class Todo(models.Model):
done = models.BooleanField()
objects = TodoManager()

L'implémentation permet de passer de :

Todo.objects.filter(done = True)

à

Todo.objects.is_done()

Très pratique côté template.

 Et il est possible de chainer de la facon suivante :

Todo.objects.is_done().order_by_user()

jeudi, 24 novembre 2011

Django - Dénormalisation d'un queryset

Dans quelques rares cas, l'ORM de Django ne suffit plus. Lorsque votre requête est spécifique il existe plusieurs solutions que j'expose dans cet article illustré par le tri de liste.

Lire la suite...

mercredi, 23 novembre 2011

Django - QuerySetManager - Bonnes pratiques

J'ai déjà parlé de l'intérêt des querySetManager et de leur mise en place dans un projet Django. Désormais avec un peu de recul et l'intervention d'Olivier Meunier (l'homme aux milles pseudonymes), il semble plus pertinent d'externaliser la création du manager et du queryset. C'est à dire, pour l'exemple ci-dessous, définir tout ce joyeux code en dehors de la classe "Project".

Lire la suite...

jeudi, 15 septembre 2011

Django : Trier vos utilisateurs par ordre alphabétique

Il existe probablement d'autres solutions. Dans cet article je vous donne les clés pour réussir à trier correctement les utilisateurs par nom et prénom. L'exercice est assez simple lorsque l'utilisateur a renseigné correctement son identité, c'est à dire "Nom et Prénom". Cela devient plus chaotique, quand un seul des champs est renseigné.

Lire la suite...

dimanche, 11 septembre 2011

Template Tag pour Django extended choices

Voici un simple tag à copier coller dans votre projet afin d'utiliser très simplement "extended choices" côté template. Cet article est un complément de Django Extented Choices.

Edit : 15/10/2011 Il existe une méthode directement intégrée à Django : https://docs.djangoproject.com/en/dev/ref/models/instances/#extra-instance-methods. (Merci Dom). Cette méthode suffira dans la majorité des cas, sinon voir exemple ci-dessous.

Lire la suite...

mardi, 16 août 2011

Django extended choices

Django extended choices permet de gérer avec simplicité et efficacité les constantes au sein d'une application Django. Cet article fait suite à la publication de J-Mad.

Lire la suite...

lundi, 11 juillet 2011

Récursivité au sein d'un template django

Pas de nouveauté fracassante, juste l'exemple d'une syntaxe simple et dépouillée présentant la récursivité du côté des templates. L'exemple présente l'affichage d'une liste de commentaires en cascade. Cf Screenshot. (Valide Django 1.2)

Lire la suite...

vendredi, 25 mars 2011

Django : Personnaliser la page d'erreur CSRF

Pour se défendre des attaques CSRF, Django contient les outils indispensables. Cet article donne la recette pour gérer soi-même le rendu de la page d'erreur liée à ce type d'attaque.

Lire la suite...

dimanche, 7 novembre 2010

Installation de django-debug-toolbar sur Ubuntu / Nginx

Django-debug-toolbar fait partie des outils indispensables du développeur django. C'est un formidable outil permettant de traquer les entrées-sorties de votre application ( requêtes http, requêtes bdd, sessions...). Comme à chaque fois, il existe plusieurs solutions pour installer des paquets python. Cet article présente l'installation de la django-debug-toolbar depuis les dépôts Ubuntu. Aussi, il vous sera grès d'adapter le passage "configuration" selon le type d'installation que vous avez effectué.En effet, les fichiers ne s'installent pas tous au même endroit.

Attention, l'ensemble des manipulations qui vont suivre peuvent rendre votre système d'exploitation Ubuntu instable. L'utilisation du compte admistrateur (commande sudo...) suscitent des risques pour lequel je décline toute responsabilité.

Lire la suite...

jeudi, 21 octobre 2010

Django Managers, Queryset Managers. Récupérer vos retraités rapidement.

Si je voulais faire simple et rapide je vous conseillerais de lire la documentation Django sur les Managers ainsi que la version 1.2. Tout est très bien expliqué. Je me permets ici de réexpliquer rapidement l'intérêt de la chose et de présenter une autre approche, tout aussi intéressante des querysets managers.

Lire la suite...

vendredi, 2 avril 2010

Django, internationaliser un "template tag"

De base la commande python manage.py makemessages -l fr permet de générer un fichier .po contenant les chaines à traduire. C'est pratique et puissant, car très rapidement, toutes chaines prêtes à être traduite dans les actions (views.py), les formulaires (forms.py), les modèles (models.py), les templates (*.html).. se retrouvent listées.
Le hic, c'est que cette commande est incapable de détecter les chaines à traduire dans nos templates tag perso. Il faut alors ajouter la bonne expression régulière au sein du code Django.

Modifier le code Django

Il y a probablement beaucoup plus propre mais voici la démarche :

  1. Localiser l'installation de django dans votre système ( via locate django)
  2. Localiser le fichier trans_real.pyc
  3. Ajouter une nouvelle expression régulière dans ce fichier
  4. Ajouter l'appel à l'expression régulière
  1. Editer le fichier : sudo vim /usr/local/lib/python2.6/dist-packages/django/utils/translation
  2. Ligne 406 ajouter : voir code -> permet de détecter les chaines de la forme {% sheet_field mon_objet "chaine à traduire" %}
  3. Ligne 462 ajouter : imatch2 = inline_re2.match(t.contents)
  4. Ligne 469 ajouter : voir code

Logiquement via la commande python manage.py makemessages -l fr de nouvelles chaines doivent être repérées. Sinon la compilation du fichier .po en fichier .mo reste identique via la commande python manage.py compilemessages . PS : J'utilise généralement poedit ou un simple éditeur de texte pour traduire les chaines et vous ?

 

vendredi, 22 janvier 2010

Utiliser bpython au sein de django pour Ubuntu

Django logo bugSuite au commentaire de Narbonne sur l'article d'hier "Quelques outils utiles pour django" je livre aujourd'hui la rapide manipulation permettant d'utiliser bpython avec django. Bpython est un terminal python avancé. En temps réel il colore, indente, propose les méthodes liées aux objets courants, via l'introspection. Il contient un historique, et des commandes rapides pour enregistrer et "pastebiner" le contenu du terminal sans le quitter. Bref on gagne du temps.

Lire la suite...

mercredi, 20 janvier 2010

Quelques outils utiles pour django sous Ubuntu - "Debugging"

Django logo bugTravaillant désormais depuis plus de neuf mois avec le framework django sur le prochain logiciel Opquast, je me permets, aujourd'hui, de fournir très modestement quelques retours d'expérience. Naturellement, toutes les étapes, les logiciels présentés ci-dessous sont compatibles avec la distribution Ubuntu. Pour MacOsX de simples adaptations semblent suffisantes, enfin pour Windows je vous laisse canoter. Cet article présente l'ensemble des outils me permettant de "débugger", tester plus rapidement du code "django / python". Attention, l'ensemble des manipulations qui vont suivre peuvent rendre votre système d'exploitation Ubuntu instable. L'utilisation du compte admistrateur (commande sudo...) suscitent des risques pour lequel je décline toute responsabilité.

Lire la suite...

mardi, 28 avril 2009

Django : Eliminer les doublons, utilisation de group by

Nous avons parfois besoin d'éviter les doublons en sortie de requête. Il existe plusieurs solutions afin obtenir satisfaction.

  • distinct()
  • values()
  • values_list()

Lire la suite...

mardi, 14 avril 2009

[Django 1.0] Commande automatique personnalisée

Pouvoir utiliser des commandes automatiques pour créer un script sql à partir d'un document json, obtenir un dump de la base, créer un projet .. bref c'est déjà bien pratique, mais développer ses propres commandes (en 5 minutes) c'est autre chose. je me permets ici de décrire rapidement sous forme d'item la marche à suivre. Cet article a pour principal but la découverte des commandes personnalisées en django.

Lire la suite...

lundi, 13 avril 2009

Participer au projet django-fr, traduction de la documentation depuis Ubuntu

django-logo-negative.resized.pngSi la majorité des informations sont disponibles sur la page bitbucket dédiée, il reste cependant quelques zones d'ombre pour les débutants souhaitant s'investir sur django-fr. J'oubliais, pour participer au projet de traduction, nul besoin d'être un cador du python ou autre langage. Ce qui suit se veut être un mode d'emploi pour tous les utilisateurs d'Ubuntu.

Lire la suite...

lundi, 5 janvier 2009

Evénement PHP le 13 janvier 2009

Les Éditions Eyrolles organisent à la Cantine un événement PHP le 13 janvier 2009, en collaboration avec l’AFUP. Vous retrouverez que du beau monde comme Cyril Pierre de Geyer, Guillaume Ponçon, Eric Daspet, Fabien Potencier, Nicolas Perriault, Laurent Jouanneau, David Larlet, Christophe Porteneuve, Julien Pauli.

L'évènement permettra de passer en revue et de comparer les différents frameworks populaires PHP5, comme Zend framework, Symfony, Jelix et de les comparer à leur homologue comme Django, RoR.