Fantomas’side

Weblog open-source

Archives pour le tag : middleware

Flux RSS de middleware

Ô middleware, mon beau middleware : Request Template Loader

Dans le monde du web, là où tout est anarchie (ou presque), je me retrouve confronté assez souvent à cette problématique :

Comment afficher le contenu d'un site réalisé avec Django sur un autre site déjà existant ?

Là où je bosse, on aime bien les iframes HTML (no comments please :)), mais le contenu ou le style de la frame incluse ne correspondent pas forcément au site recevant la frame. L'idée, vu qu'on se trouve à la base dans un environnement Django, serait de déployer un nouveau site, avec son propre jeu de templates prévues pour le site incluant les frames.

Mais ce genre de technique nécessite de mettre en place un nouveau domaine, de déployer et de maintenir 2 sites. Bon vous me direz que ce n'est pas forcément ce qu'il y a de plus dur, mais il y a moyen de faire mieux. Et surtout que ce passe-t-il si vous devez faire ce genre d'opération non pas sur 1 site, mais sur plusieurs. Tout de suite cela devient plus ennuyeux. :(

C'est là où intervient la solution du middleware. L'idée est de pouvoir passer en GET un paramètre qui conditionnera le chargement des templates dans le site source. Comme cela peu importe combien de frames au look différent on devra gérer, la mise en forme et la personnalisation du contenu se fera très facilement.

Maintenant place au code, les explications sur le fonctionnement viennent directement après.

import os
from urllib import urlencode
from ...

Continuer la lecture

Le temps des releases : Django-sekh

Vous avez certainement déjà vu dans Google quand vous consultez une page depuis son cache, les termes de la recherche sont coloriés dans le contenu de la page pour permettre de les discerner rapidement.

De ce principe certains sites ont adapté la même technique en coloriant certains mots de la page correspondant à la recherche de l'utilisateur si il provient d'un moteur de recherche. 

C'est ce que django-Search Engine Keywords Highlighter fait !

Une fois installé avec BeautifulSoup, il suffit juste d'ajouter ce middleware à la fin de la liste dans votre fichier settings.

MIDDLEWARE_CLASSES = (
  ...
  'sekh.middleware.KeywordsHighlightingMiddleware',
)

Moi quand c'est facile à installer, j'aime ! :D

Ce middleware va rajouter une balise span autour des mots de la recherche, le tout avec des classes qui vont bien permettant la décoration en CSS.

L'inconvénient est que si votre HTML est mal formatté, le middleware risque de faire planter la page.

Pour voir un exemple cliquez ici.

Pour plus d'informations et pour télécharger le code :

http://github.com/Fantomas42/django-sekh/tree/master

Django unique et timed sessions

Comment rendre unique les comptes utilisateurs connectés sur un site en Django ?

Ce genre de problématique se retrouve souvent sur les sites internet proposant des abonnements à un service en ligne, voulant empêcher le partage d'abonnement.

Pour les besoins d'un projet spécifique en Django au sein de la société Emencia là où je travaille, j'ai du développer un moyen d'empêcher 2 utilisateurs de se connecter sur un compte utilisateur en même temps.

Mais le problème ne s'arrête pas là, comment empêcher la connection et la déconnection successive entre 2 utilisateurs ? L'idée est de donner un temps minimum de connection à chaque session ouverte pour empêcher la déconnection, par exemple 5 minutes.

Pour cela j'ai écrit un Middleware pour Django qui va se charger de rendre unique chaque sessions utilisateurs sur le site. Utiliser un middleware donne l'avantage d'être réutilisable et facile à installer.

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'utsessions.middleware.UTSessionMiddleware',
    )

Après plusieurs refactorings et tests, permettant de configurer le comportement du middleware, comme la déconnection automatique, j'ai publier le code source sur GoogleCode pour que tout le monde puisse en profiter.

Pour plus d'informations, ou pour télécharger le code, consulter le site web du projet : Django UT Sessions.

Pour installer le module depuis Pypi :

$ easy_install utsessions