2010-12-09 4 views
0

Je voudrais écrire un décorateur à utiliser sur les vues de mon site pour d'abord vérifier si le profil utilisateur de l'utilisateur connecté a un paramètre particulier. Dans mon cas, c'est user.get_profile.user_status et la valeur peut être "expired" ou "active". Si user_status = "expiré", je souhaite les rediriger vers une page de mise à jour du compte de facturation. S'ils sont actifs, ils peuvent passer. Je voudrais être quelque chose comme @must_be_active ou @paywall_checkDécorateur Python pour les vues Django: Vérifier un paramètre particulier dans UserProfile

Jamais écrit un décorateur avant. Des idées sur la meilleure façon de commencer?

Répondre

3

D'abord, lisez ce http://docs.djangoproject.com/en/1.2/topics/auth/#limiting-access-to-logged-in-users-that-pass-a-test

Il est en fait plus simple si vous n'écrivez pas un décorateur.

from django.contrib.auth.decorators import user_passes_test 

def must_be_active(user): 
    if .... whatever .... 

def paywall_check(user): 
    if .... whatever .... 

@user_passes_test(must_be_active) 
def my_view(request): 
    do the work 

@user_pass_test(paywall_check) 
def another_view(request): 
    do the work 
+0

Cela a fonctionné pour moi. Cependant, au lieu de l'appliquer aux vues, j'ai appliqué cette technique à mon urls.py où d'autres paramètres similaires sont présents. Cela a plus de sens pour moi de les avoir ici. Après votre réponse, cet article de blog a également aidé: http://jonatkinson.co.uk/djangos-user_passes_test-and-generic-views/ – Flowpoke

Questions connexes