Avoir des problèmes avec user.is authentifié dans le modèle django

Désolé si vous avez essayé de m'aider quand je l'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 travaille sur l'implémentation de l'authentification des utilisateurs sur mon site django. Tout fonctionne. Mes vues, modèles, URL, etc. sont tous mis en place. Les utilisateurs peuvent s'inscrire, se connecter, se déconnecter. Le problème que j'ai est avec ce bit 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 lorsque je suis connecté, il affiche toujours "connexion" comme une option plutôt que "Log Out". Cependant, si je clique sur le lien, il me redirigera vers /profil parce que c'est ce que la vue lui dit de faire si je suis connecté. Donc, clairement, il sait que je suis connecté, mais le modèle n'est pas readint user. is_authenticated comme true.

La vue relative aux 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))
27
demandé sur Milano Slesarik 2013-06-11 00:22:50

2 réponses

Si le processeur de contexte auth est activé, alors user est déjà dans le contexte du modèle, et vous pouvez faire:

{% if user.is_authenticated %}

Si vous souhaitez accéder à request dans le modèle, assurez-vous d'avoir activé le processeur de contexte de requête .

Dans votre question, vous utilisez render_to_response. Depuis Django 1.3, il est préférable d'utiliser render au lieu de render_to_response. Utiliser render_to_response avec RequestContext(request) fonctionne dans Django render Si vous voulez processeurs de contexte pour travailler.

return render(request, 'template/login.html', context)
42
répondu Alasdair 2018-03-05 13:45:30

Sachez que depuis Django 1.10 le is_authenticated est décoré avec @la propriété et le comportement diffère.

Pour UNAUTHENTICATED utilisateur appelant {{user.is_authenticated}} résultats:

CallableBool(True) (Quand sur Django True)

Pour authentifié appel de l'utilisateur {{user.is_authenticated}} résultats:

CallableBool(False) (Quand sur Django False)

Si vous devez passer par exemple à votre valeur javascript comme true ou false vous pouvez le faire en appliquant le filtre |yesno:"true,false"

<script language="javascript"> 
var DJANGO_USER = "{{user.is_authenticated|yesno:"true,false"}}";
</script>
4
répondu Andrzej Kostański 2017-05-12 22:02:21