2010-04-10 3 views
2

J'ai un décorateur que j'utilise pour mon point de vue @valid_sessionaccès session django d'un décorateur

from django.http import Http404 

def valid_session(the_func): 
""" 
function to check if the user has a valid session 
""" 
def _decorated(*args, **kwargs):   
    if ## check if username is in the request.session: 
     raise Http404('not logged in.') 
    else: 
     return the_func(*args, **kwargs) 
return _decorated 

Je voudrais accéder à ma session dans mon decoartor. Lorsque l'utilisateur est connecté, je mets le nom d'utilisateur dans ma session.

Répondre

0

Vous pouvez transmettre la demande (ou simplement la session) en tant que parameter to the decorator. Je ne sais tout simplement pas comment l'adopter. J'ai essayé de trouver quelque chose de similaire la nuit dernière.

4

Will quelque chose comme ce qui suit à résoudre votre problème:

def valid_session(func): 
    def decorated(request, *args, **kwargs): 
     print request.session 
     return func(request, *args, **kwargs) 
    return decorated 
+0

non. Il n'a pas les variables de session. – user140736

+0

@ ed1t, avez-vous mis le nom d'utilisateur à request.session avant de le lire? – Yaroslav

+2

@ ed1t Est-ce que 'django.contrib.sessions' est installé? Qu'en est-il de la liste MIDDLEWARE_CLASSES dans votre settings.py? A-t-il quelque chose comme un intergiciel de session? – satoru

1

La fonction d'affichage prend la demande comme premier paramètre, de sorte que le décorateur recevra comme premier paramètre ainsi. Vous pouvez en extraire la session avec request.session.