def index(request):
the_user = request.user
W Django, skąd mam wiedzieć, czy jest to prawdziwy użytkownik, czy nie? Próbowałem:
if the_user:
ale „AnonymousUser” istnieje, nawet jeśli nikt się nie zaloguje. Dlatego zawsze zwraca wartość „prawda” i to nie działa.
python
django
http
authentication
TIMEX
źródło
źródło
views.py
powinieneś używać,request.user.is_anonymous()
ponieważ jest to funkcja, podczas gdy w szablonach powinieneś używać{{user.is_anonymous}}
is_authenticated()
: zobacz docs.djangoproject.com/en/1.9/topics/auth/default/ ...is_authenticated()
. Zobacz także thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymousrequest.user.is_authenticated
, co jest atrybutem w Django 1.10+, takim samym jakis_anonymous
teraz - patrz docs.djangoproject.com/en/dev/ref/contrib/auth/… . Zauważ, że jeśli używasz również Django Guardian, te atrybuty nie zrobią tego, co myślisz, że będą - zobacz django-guardian.readthedocs.io/en/stable/configuration.htmlAlternatywa dla
if user.is_anonymous(): # user is anon user
polega na testowaniu, aby zobaczyć, jaki jest identyfikator obiektu użytkownika:
if user.id == None: # user is anon user else: # user is a real user
zobacz https://docs.djangoproject.com/en/dev/ref/contrib/auth/#anonymous-users
źródło
Wiem, że robię tu trochę grobów, ale wyszukiwanie w Google doprowadziło mnie do tej strony.
Jeśli Twój widok domyślnie wymaga, aby użytkownik był zalogowany, możesz zaimplementować dekorator @login_required:
from django.contrib.auth.decorators import login_required @login_required def my_view(request): …
źródło
Miałem podobny problem, z wyjątkiem tego, że był to na stronie, do której został wysłany login_redirect_url. Musiałem umieścić w szablonie:
{% if user.is_authenticated %} Welcome Back, {{ username }} {% endif %}
źródło