it-swarm.com.de

Wie prüfe ich, ob ein Benutzer angemeldet ist (wie man user.is_authenticated richtig verwendet)?

Ich schaue über diese Website , kann aber einfach nicht herausfinden, wie das geht, da es nicht funktioniert. Ich muss überprüfen, ob der aktuelle Site-Benutzer angemeldet ist (authentifiziert), und ich versuche Folgendes:

request.user.is_authenticated

obwohl sichergestellt ist, dass der Benutzer angemeldet ist, wird Folgendes zurückgegeben:

>

Ich kann andere Anfragen (aus dem ersten Abschnitt in der URL oben) ausführen, z.

request.user.is_active

was eine erfolgreiche Antwort zurückgibt.

204
Rick

Update für Django 1.10+ : is_authenticated ist jetzt ein Attribut in Django 1.10. Die Methode ist aus Gründen der Abwärtskompatibilität noch vorhanden, wird jedoch in Django 2.0 entfernt.

Für Django 1.9 und älter :

is_authenticated ist eine Funktion. Du solltest es gerne nennen

if request.user.is_authenticated():
    # do something if the user is authenticated

Peter Rowell hat darauf hingewiesen, dass Sie in der standardmäßigen Django-Vorlagensprache möglicherweise in die Knie gehen und keine Klammern verwenden, um Funktionen aufzurufen. Vielleicht haben Sie so etwas im Vorlagencode gesehen:

{% if user.is_authenticated %}

In Python-Code handelt es sich jedoch tatsächlich um eine Methode in der User-Klasse.

435
Brian Neal

Folgender Block sollte funktionieren: 

    {% if user.is_authenticated %}
        <p>Welcome {{ user.username }} !!!</p>       
    {% endif %}
15
Sopan

Django 1.10+

Verwenden Sie ein Attribut, not eine Methode:

if request.user.is_authenticated: # <-  no parentheses any more!
    # do something if the user is authenticated

Die Verwendung der gleichnamigen Methode ist in Django 2.0 veraltet und wird in der Django-Dokumentation nicht mehr erwähnt.


Beachten Sie, dass für Django 1.10 und 1.11 der Wert der Eigenschaft eine CallableBool und keine boolesche Eigenschaft ist, die einige seltsame Fehler verursachen kann. Zum Beispiel hatte ich eine Ansicht, die JSON zurückgab

return HttpResponse(json.dumps({
    "is_authenticated": request.user.is_authenticated()
}), content_type='application/json') 

dass nach Aktualisierung auf die Eigenschaft request.user.is_authenticated die Ausnahme TypeError: Object of type 'CallableBool' is not JSON serializable ausgelöst wurde. Die Lösung bestand darin, JsonResponse zu verwenden, das das CallableBool-Objekt bei der Serialisierung ordnungsgemäß verarbeiten konnte:

return JsonResponse({
    "is_authenticated": request.user.is_authenticated
})
14
Mark Chackerian

Ihrer Ansicht nach:

{% if user.is_authenticated %}
<p>{{ user }}</p>
{% endif %}

In Ihren Controller-Funktionen fügen Sie Dekorator hinzu:

from Django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):
1
Cubiczx