Django-tagging, et le tag est en toi

Me revoilà donc pour le désormais presque célèbre billet mensuel de la django-app du mois. Comme d’habitude, je le fais sur le fils, limite à être en retard. Mais c’est bien normal, après tout il me faut bien un mois complet pour choisir, tester à fond et rédiger un magnifique billet concernant l’app du mois.

L’app d’octobre est donc django-tagging. Qui comme son nom l’indique sert à taguer des models.

Où on le trouve, comment on l’installe, tout ça quoi ?

On le trouve, très simplement sur google-code, sur sa page projet.  Pour l’installation, là aussi c’est du très classique :

  • pip
  • easy_install
  • télécharger un tar.gz
  • utiliser le svn de google-code

moi j’ai choisi, une fois n’est pas coutume d’utiliser easy_install.

Niveau documentation ?

Un fichier en ReStructuredText, accessible directement sur le site et présent dans les sources donne la doc et des exemples d’utilisation. Il n’est d’ailleurs par forcément à jour. Certaines fonctionnalités décrites comme étant dans la version de dev sont en fait dans la 0.3

En plus, trois petites pages sont présentes sur le wiki :

  • une pour parler d’un tips d’utilisation (avec des properties)
  • une pour les incompatibilité entre versions
  • une pour les idées et le planning

Ils sont où les murs alors ? ( ou qu’est ce qu’on peut faire avec django-tagging)

Ok, ce titre de chapitre est surement le plus pourris de ma carrière de créateur de titre de chapitre, mais tant pis j’assume.

Le configurer

Il y a quelques possibilité de configuration, en setant des variables dans le settings.py du projet. On peut par exemple forcer à ce que les tags soient en minuscule ou donner la longueur maxi d’un tag.

L’utiliser

On peut donc taguer des instances de model. Mais bon en disant cela, j’ai rien dit. En fait on peut register des models pour pouvoir ensuite simplement rajouter des tags (ou les lister) aux instances de ces models.

On peut également passer directement par les managers de Tags, fournit par l’app, pour taguer des instances.

L’utiliser encore plus

il y a quelques fonctions utilitaires fournis avec l’app.

On pourra par exemple ( avec la fonction get_intersection_by_model) récupéré le sous-ensemble des instances contenu dans le queryset passé en paramêtre 1 qui sont tagués avec tout les tags d’une liste passé en paramêtre 2

De même avoir toutes les instances d’un models tagués par un ou plusieurs tags est possible avec la fonction get_by_model, mais aussi les unions d’instance ou les groupe d’instance ayant les même tag qu’un autre objet …

Et aussi (et presque surtout aurais-je envie de dire) la fonction calculate_cloud qui permet de calculer le nuage de tag en calculant une taille de font pour chacun des tags passé en paramètre. (l’algorithme utilisé pour le calcul est configurable, en plus)

afficher les tags

Avec 4 templatestags différent pour afficher le nuage de tag, tout les tags d’un objet, tout les objets (d’un model précis) tagués avec un tag précis, ou tout les tags qui sont reliés à un model (enfin à ses instances, vous m’avez compris)

Conclusion.

Même si la façon d’ajouter un tag peu sembler un peu alambiqué (pour pouvoir avoir des tags avec des espaces, ou avec des espaces plus des guillemets, etc .. ) , c’est vraiment une bonne app, qui ne fait qu’une chose, mais qui le fait très bien. Donc, je ne peux que conseiller son utilisation.

Django registration, et avoir des users devient facile.

Tout d’abord, mes plus plates excuses à vous tous, fidèles lecteurs de mon petit espace qui attendiez avec d’abord joie, puis impatience, puis tristesse et désespoir, le billet de la django app du mois de septembre.

Alors oui, nous sommes le premier octobre et le billet de la django app de septembre n’a pas encore été posté. Oui, c’est une honte de lancer ainsi une si bonne idée et de ne pas suivre le principe même de la bonne idée de le deuxième mois. Oui, je reconnais tout cela. Mais votre honneur, je plaide coupa.. pardon innocent.

Ce n’est pas de ma faute si je n’ai pas écrit ce billet. Mon chien (comment ça je n’ai pas de chien?) a mangé mes devoi.. pardon mon cable réseau. Et puis c’est sans parler du débarquement des ET, qui a eu lieu dans mon jardin (comment ça y a pas de jardin dans mon appart?) et qui a ruiné ma pelouse.

Bon, trêve de bêtises. En fait il y a deux raisons à ce retard sur le deuxième billet djangoapp du mois (et aussi sur mon relatif silence sur ce blog). Deux raisons très simples :

  • Une grosse période bien chaude au boulot, avec suffisamment de boulot pour y bosser soir et week-end.
  • Le fait que la troisième occurrence du SPLLOS (le salon professionnel des logiciels libres qui aura lieu à marseille, le 13 octobre) se rapproche à grand pas (ben oui le 13 octobre) et qu’en temps que président de l’association qui l’organise (Libertis, l’association des boites qui font du libre en PACA), j’ai pas mal de truc à gérer (d’ailleurs je profite de ce billet, même si ils ne le liront jamais, pour remercier plus qu’un peu les membres de l’asso qui bossent aussi sur ce sujet, heureusement qu’on est à plusieurs sur le truc, sinon … )

Et, comme les deux points que je cite au dessus sont toujours d’actualité, le billet du mois de septembre (mais oui on est encore, presque, en septembre) sera un billet court, sur une app que beaucoup doivent connaître mais qui à l’avantage d’être suffisament petite pour être tester avec peu de temps  : J’ai nommé django-registration. Qui sert à la registration des users (désolé ça fait depuis le début du billet que je voulais le faire cet anglicisme).

1- A quoi ça sert , où on le trouve, comment on l’installe ?

1.1 Le pourquoi du comment

Utiliser django-registration c’est bien parce que cela permet de ne pas réinventer la roue et donc de ne pas perdre du temps à développer un système d’enregistrement/activation/ utilisateurs.

1.2 Où on la trouve ?

Sur bitbucket, il y a un repo avec un wiki bien sympa , ici : http://bitbucket.org/ubernostrum/django-registration/

1.3 Comment on l’installe ?

Il y a trois manière pour l’installer, par easy_install , par pypi ou avec les bonnes vieilles sources (hg cloneeeee) et un python manage setup.py.
Personnellement j’ai une préférence pour la troisième méthode, la doc étant incluses dans les sources, je trouve ça plus facile d’avoir les sources du truc que je met à jour de temps en temps.

2- Mais ça fait quoi django-registration, pour de vrai ?

Django registration met un place un système complet d’enregistrement des users.

A savoir, vous avez la vue qui gère le fait qu’un user veut s’inscrire et va remplir un joli petit formulaire.

Une fois le formulaire submit, django va créer un compte user inactif et envoyer un mail qui contiendra une clé d’activation. L’utilisateur qui vient de submit sa demande d’enregistrement verra alors ensuite apparaître une jolie page lui disant d’aller vérifier ses mails et d’activer son compte.

Truc sympa, l’app gére le fait d’interdire certains provider d’emails jetable ou l’interdiction de créer un compte avec un email déjà utilisé.

Cerise sur le gâteau, il y a même un petit script (qui utilise les commandes django) qui permettra de supprimer les comptes qui n’ont pas été activés et qui sont considérés comme expirés.

2.1 Et la localisation ?

Elle y est, dans tout plein de langues (y compris le français, bien entendu)

3- La doc ?

Bien fournie, très précise et claire, il n’y a vraiment rien à redire.

Une fois qu’on a installé l’app, on a plus rien à faire alors ?

Ben en fait si, parce qu’il n’y a aucun template de fournis, même pas à titre d’exemple. Il faut donc ‘tous’ les faire, mais c’est assez rapide. Et puis là aussi, la doc est vraiment bien faite et détaille précisément chaque variable du contexte de chaque view. Faire les templates n’est donc pas vraiment difficile.

4- En conclusion

Installez la et utilisez la.

Django Extensions, le couteau suisse du djangonaute.

Une nouvelle catégorie apparaît (oui je sais, encore une alors que certaines restent désespérément vide, mais grâce à la magie de wordpress, vous ne le savez pas, vu que les catégories vides n’apparaissent pas… ), la Django App du mois. Tout est dit dans le nom, tout les mois, en fin de mois, je posterais un petit billet sur une django app que j’aurais testé pendant le mois. Enfin, ça c’est le principe, est ce que je vais tout les mois avoir le temps de chercher/choisir/tester une django app.. Ça, rien n’est moins sur. (d’ailleurs j’en profite, si vous avez des idées de django app, les commentaires sont là pour ça).

Pour ce premier numéro, la django App qui a la chance d’être la django App d’août est Django Extensions. (tiens, je viens d’avoir une idée, un calendrier des DjangoApp, que les djangonautes, ou les routier, pourraient accrocher dans leur bureau ou leur camion).

1- A quoi elle sert ?

Django Extensions est une application d’aide au développement. Elle rajoute plein de commande au manage.py, commandes tellement indispensable qu’on se demande comment l’on avait pu faire sans.

Elle rajoute aussi quelques Database Model Fiels et  Database Model. Et comme si cela ne suffisait pas on gagne aussi, pour le même prix, une extension pour la gestion des ForeignKey du coté admin.

2- Et plus en détail ?

2.1 Les commandes en plus

Je vais me limiter à décrire quelqu’une des commandes que vous pourrez utiliser avec Django Extensions, celles que moi, j’utilise le plus souvent.

  • generate_secret_key

elle permet de générer une secret key pour son projet. Ca a l’air tout con et inutile, mais en fait non. Quand on utilise un gestionnaire de source pour déployer rapido son projet et que donc on ne passe pas par la commande de création de projet, et ben en fait c’est super utile.

  • create_app

rien de plus que la commande de base sauf que l’on peut donner en plus un répertoire de template à utiliser

  • reset_db

qui n’a pas eu besoin de reset 42 fois par jour sa bd ? Et passer soit par le client ligne de commande soit par les interface web d’admin, ça devient rapidement très chiant. Pour tout ces djangonautes là (dont je fais parti) reset_db c’est le paradis.

  • runscript

lance un script dans l’environnement django.

  • runserver_plus

l’une des (si ce n’est pas la) commandes la plus utile de toute l’extension. Elle nécessite d’avoir Werkzeug installé (mais un petit easy_install et c’est bon). Et elle permet ensuite de lancer le serveur de dev avec le debugguer de Werkzeug. Et là, c’est le pied. A chaque exception reçu, on se retrouve avec une vrai interface de debugger dans notre page web. On peut ouvrir des consoles interractive un peu partout (à tout les pas d’appel de fonction), on peut voir l’état courant des variables, le code de chaque fonctions tracées ). C’est juste ultime.

  • shell_plus

celle là aussi est une commande indispensable. Elle vous permet de lancer un shell qui a déjà importé tout vos models. Lorsqu’on utilise comme moi, assez souvent le shell pour faire quelques petits tests, vérifications, on se rend vite compte du gain de temps.

  • dumpscript

qui permet de générer un script python à partir des données contenu dans une base de donnée à un instant t. dumpscrit fonctionne pour toute une app ou juste un model d’app.

2.2 Le système de job

Django Extensions rajoute un mécanisme complet de job. Un job est une classe python qui dérive de BaseJob et qui implémente la fonction execute (self).

Les jobs se définissent par app django. Pour mettre en place le système de jobs pour une app, il suffira d’utiliser la commande create_jobs en lui donnant le nom de l’app en question. Django Extensions créera alors l’architecture de répertoire qui va bien.

Une fois que l’on a créé ses jobs, on peut les configurer pour qu’ils soient executés toutes les heures, les jours, les semaines, les mois. On peut aussi demander l’exécution d’un ou de plusieurs jobs en commande manage.py.

3- Comment on l’installe, où on le trouve ?

Django extensions étant hosté par google code, il suffit d’aller sur son espace google code se trouvant là http://code.google.com/p/django-command-extensions/

Pour l’installation deux possibilités :

  • télécharger la derniere versions sur le site web puis faire un simple python setup.py install
  • lancer un easy_sintall

ensuite, il vous suffira, pour chaque projet dans lequel vous voulez l’utiliser, d’ajouter django_extensions dans votre INSTALLED_APPS .

Et c’est tout.

4- Et la doc ?

Vous en trouverez sur le google code. Plutôt complète et claire. Il y a même un lien vers un screencast.

5- En conclusion

Une application à utiliser, sans aucune modération et qui fait vraiment gagner énormément de temps.