Pour ce mois de mars, je vais parler non pas d’une seule mais de deux petites apps. Deux apps parce que les apps sont tellement petites que l’on va m’accuser de tirer au flanc si je ne parle que de l’une d’entre elles. Mais que d’un autre cotés, ce n’est pas parce qu’elles sont petites qu’il ne faut pas en parler.
django-generic-aggregation
Qui n’a jamais utilisé les agrégat dans Django ? C’est quand même super utile. Et qui n’a pas ralé sur le fait que zut alors… Saperlipopette même, on ne pouvait pas utiliser les agrégat sur les Generic FK ?
Et c’est là qu’arrive django-generic-aggregation. Qui permet justement de le faire.
Concernant l’installation, trois moyens :
- easy_install
- pip
- un petit git des famille grâce à github : https://github.com/coleifer/django-generic-aggregation
Quand à la doc, vous aurez droit à la page de pypi qui est aussi la page de doc de github. Bon après, il faut bien dire que l’app n’est pas super compliqué à comprendre.
Et au pire, il y a le code des tests. Une petite précision toutefois concernant la doc, la page readthedoc de l’app renvoie pour l’instant sur un 404 readthedoc (un 404 en ASCII ART d’ailleurs)
Ensuite à l’utilisation c’est tout simple, un petit exemple, tiré de la doc :
from django.db.models import Sum, Avg
# assume a Food model and a generic Rating model
apple = Food.objects.create(name='apple')
# create some ratings on the food
Rating.objects.create(content_object=apple, rating=3)
Rating.objects.create(content_object=apple, rating=5)
Rating.objects.create(content_object=apple, rating=7)
>>> aggregate = generic_aggregate(Food.objects.all(), Rating.content_object, Sum('rating'))
>>> print aggregate
15
>>> aggregate = generic_aggregate(Food.objects.all(), Rating.content_object, Avg('rating'))
>>> print aggregate
5
Pour la petite histoire, j’ai découvert cette app en testant django-simple-ratings une autre app du même monsieur.
django-exposure
La encore une petite app toute bête qui permet de resizer des images avant de les afficher. Les images redimensionnées sont stockées en mémoire et il y a même une gestion de cache.
La doc est présente sur packages.python.org et elle explique bien la manière de l’utiliser. Après pour vraiment comprendre, vive les sources.
Quand à l’installation, vous pourrez soit utiliser :
un petit pip install django-exposure
ou une récupération d’un tar.gz sur bitbucket
ou même un hg clone
L’utilisation en elle même est très simple. Il suffit en effet d’utiliser le filtre |resize en lui donnant trois paramêtre, Width, Height et Crop.
Crop peut prendre 5 valeurs de 0 à 5 suivant le crop que vous voulez mettre en place ( 0 étant pour un crop centré).
Pour rester dans le même sujet, je ne peux finir ce billet sans parler de django-thumbnail-works qui sert comme son nom l’indique à gérer les thumbnail. Le principe étant de là, gérer cela directement au niveau de l’ImageField. Mais je ne peux vous en dire plus, je n’ai pas eu le temps de la tester.
3 Responses to “Petites apps … petites mais costaudes”
Sorry, the comment form is closed at this time.
Il me semblait que la version 1.1 ou 1.2 (?) de Django apportait justement les aggregats.
http://docs.djangoproject.com/en/1.3/topics/db/aggregation/
Quel est l’avantage de cette application du coup ?
tu ne peux pas faire des aggrégats sur des generic foreign key. L’app ne sert ‘qu’a’ ça. Rajouter les aggrégats sur les GFK
Oups, cela m’apprendra à ne pas tout bien lire…