Ayant des problèmes avec l'utilisateur.is_authenticated dans django template
Désolé si vous avez essayé de m'aider quand j'ai demandé plus tôt. Dû supprimer cette question parce que je n'étais pas autorisé à modifier des informations supplémentaires pour une raison quelconque.
Je suis en train de travailler sur la mise en œuvre de l'authentification de l'utilisateur sur mon site web de django. Tout fonctionne. Mon point de vue, les modèles, les url, etc. sont tous mis en place. Les utilisateurs peuvent s'inscrire, se connecter, se déconnecter. La question que je vais avoir est avec ce morceau de code:
{% if request.user.is_authenticated %}
<li><a href="/logout">Log Out</a></li>
{% else %}
<li><a href="/login">Log In</a></li>
{% endif %}
Même quand je suis connecté, c'est encore l'affichage de "Log In" comme une option plutôt que "Log Out". Cependant, si je clique sur le lien, ça va me diriger vers /profil parce que c'est ce que le point de vue dit-il à faire si je suis connecté. Donc, clairement, il sait que je suis connecté, mais le modèle n'est pas readint de l'utilisateur.is_authenticated comme vrai.
Le point de vue concernant les demandes de connexion est:
def LoginRequest(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/profile/')
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
profile = authenticate(username=username, password=password)
if profile is not None:
login(request, profile)
return HttpResponseRedirect('/profile/')
else:
return render_to_response('template/login.html', {'form': form}, context_instance=RequestContext(request))
else:
return render_to_response('template/login.html', {'form': form}, context_instance=RequestContext(request))
else:
''' user is not submitting the form, show them login form '''
form = LoginForm()
context = {'form': form}
return render_to_response('template/login.html', context, context_instance = RequestContext(request))
Vous devez vous connecter pour publier un commentaire.
Si l'auth contexte processeur est activé, puis
user
est déjà dans le modèle de contexte, et vous pouvez le faire:Si vous souhaitez accéder à
request
dans le modèle, assurez-vous que vous avez activé la contexte de demande de processeur.Dans votre question, vous utilisez
render_to_response
. Depuis Django 1.3, il a été préférable d'utiliserrender
au lieu derender_to_response
. À l'aide derender_to_response
avecRequestContext(request)
travaille dans Django <= 1.9, mais à partir de Django 1.10, vous devez utiliser lerender
raccourci, si vous voulez le contexte processeurs de travail.RequestContext
render_to_response
, mais je l'ai mis à jour-à-dire que vous devez utiliserrender
de Django à partir de 1.10.Compte que depuis Django 1.10 la
is_authenticated
est décoré avec @property et le comportement diffère.Pour non AUTHENTIFIÉ de l'utilisateur de l'appel de {{utilisateur.is_authenticated}} résultats:
CallableBool(True)
(lorsque sur Django < 1.10 c'étaitTrue
)Pour AUTHENTIFIÉ de l'utilisateur de l'appel de {{utilisateur.is_authenticated}} résultats:
CallableBool(False)
(lorsque sur Django < 1.10 c'étaitFalse
)Si vous avez besoin de passer de l'e.g à l'option javascript de votre valeur comme
true
oufalse
vous pouvez le faire avec l'application de filtres|yesno:"true,false"