Wie überprüfe ich, ob dieser Benutzer anonym oder tatsächlich ein Benutzer auf meinem System ist?


81
def index(request):
    the_user = request.user

Woher weiß ich in Django, ob es sich um einen echten Benutzer handelt oder nicht? Ich habe es versucht:

if the_user: "AnonymousUser" ist jedoch auch dann vorhanden, wenn sich niemand anmeldet. Es wird also immer true zurückgegeben, und dies funktioniert nicht.

Antworten:


136

Sie können überprüfen, ob die request.user.is_anonymousRücksendung erfolgt True.


20
views.pyrequest.user.is_anonymous(){{user.is_anonymous}}
— Beachten

11
Scheint wie in Django 1.9 ist es eher is_authenticated(): siehe docs.djangoproject.com/de/1.9/topics/auth/default/…
— Paolo Stefan

11
von Django 1.10 ist is_anonymous keine Methode mehr (nur eine Eigenschaft)
— maxbellec

2
Ich muss Paolo Stefan zustimmen, die Methode, die Sie verwenden möchten, ist is_authenticated(). Siehe auch thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymous
— Al Sweigart

3
Die aktuelle Empfehlung lautet: Verwenden Sie request.user.is_authenticateddieses Attribut in Django 1.10+ genauso wie is_anonymousjetzt - siehe docs.djangoproject.com/de/dev/ref/contrib/auth/… . Beachten Sie, dass, wenn Sie auch Django Guardian verwenden, diese Attribute nicht das tun, was Sie denken - siehe django-guardian.readthedocs.io/en/stable/configuration.html
— rhunwicks

18

Eine Alternative zu

if user.is_anonymous():
    # user is anon user

Testen Sie, um festzustellen, wie die ID des Benutzerobjekts lautet:

if user.id == None:
    # user is anon user
else:
    # user is a real user

Siehe https://docs.djangoproject.com/de/dev/ref/contrib/auth/#anonymous-users


4
scheint eine schlechte Idee. user.is_anonymous () wird in den neuen Versionen weiterarbeiten, user.id möglicherweise nicht, abhängig von zukünftigen Implementierungen
— maxbellec

Beachten Sie außerdem, dass der anonyme Benutzer bei Verwendung von Django Guardian auch eine ID hat - siehe django-guardian.readthedocs.io/en/stable/… .
— Rhunwicks

Und die aktuelle Empfehlung gemäß docs.djangoproject.com/de/dev/ref/contrib/auth/… lautet, User.is_authenticated
— rhunwicks

Das funktioniert leider nicht. Es war das erste, was ich versuchte. Scheint, dass der "anonyme" Benutzer bei Verwendung von user == None (und anderen Variationen) angezeigt wird.
— Harlin

4

Ich weiß, dass ich hier ein bisschen grabe, aber eine Google-Suche hat mich auf diese Seite gebracht.

Wenn Ihre Ansicht def erfordert, dass der Benutzer angemeldet ist, können Sie den Dekorator @login_required implementieren:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    …

Dies funktioniert in der Standard-Anmeldeansicht ohne einige Anpassungen nicht.
— Harlin

0

Ich hatte ein ähnliches Problem, außer dass es sich auf einer Seite befand, an die die login_redirect_url gesendet wurde. Ich musste die Vorlage einfügen:

{% if user.is_authenticated %}
    Welcome Back, {{ username }}
{% endif %}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.