2010-02-19 4 views
0

Est-ce la façon la plus efficace et la plus propre de vérifier les sessions pour une variable de nom d'utilisateur et de sortie (selon que oui ou non) "Vous êtes connecté". ou "Vous êtes déconnecté"?Ecriture d'un meilleur code pour la vérification de la variable de session de render_to_response

PYTHON (DJANGO)

def logged_in(request) 
    return render_to_response('loggedincheck.html', {'request': request.session.get['username']}) 

HTML

{% si la demande%} Vous êtes connecté. {% Else%} Vous n'êtes pas connecté in. {% endif%}

Répondre

5

Django est livré avec certains processeurs de contexte de modèle - qui sont simplement des fonctions qui insèrent des variables dans chaque modèle qui est rendu sur votre site.

Comme l'indique @Jack, l'un d'entre eux est appelé django.core.context_processors.auth. Cela insère une variable appelée user dans chaque modèle et est activée par défaut.

Par conséquent, pour savoir si un utilisateur est connecté ou non, vous devez utiliser ce code dans vos modèles:

{% if user.is_authenticated %} 
    You're logged in. 
{% else %} 
    You're not logged in. 
{% endif %} 

Le problème avec l'utilisation du code qui a donné Jack, est que la user variables Il existe toujours - donc cela sera toujours évalué à True (tant que vous utilisez le processeur de contexte django.core.context_processors.request, qui est et non activé par défaut). Par conséquent, pour savoir si l'utilisateur est réellement connecté, vous devez utiliser la méthode is_authenticated().

0

Si vous utilisez django.contrib.auth et les deux django.core.context_processors.auth et django.core.context_processors.request sont dans votre TEMPLATE_CONTEXT_PROCESSORS, vous pouvez simplement utiliser:

{% if request.user.is_authenticated %} 
    You're logged in. 
{% else %} 
    You're not logged in. 
{% endif %} 
+0

-1 'request.user' est toujours présent, car un utilisateur non authentifié (chaque utilisateur) est également un utilisateur. –

+0

Vous avez raison. Je suis habitué à vérifier des permissions spécifiques au lieu de les authentifier, donc j'ai oublié de jeter ce petit bout dedans. Je l'ai réparé. –

Questions connexes