Как проверить, вошел ли пользователь в систему (как правильно использовать пользователя.аутентифицируется)?
Я смотрю за этот сайт но просто не могу понять, как это сделать, поскольку он не работает. Мне нужно проверить, вошел ли текущий пользователь сайта (аутентифицирован), и я пытаюсь:
request.user.is_authenticated
несмотря на то, что пользователь вошел в систему, он возвращает только:
>
Я могу делать другие запросы (из первого раздела В url выше), таких как:
request.user.is_active
который возвращает успешный ответ.
4 ответов
обновление для Django 1.10+: is_authenticated
теперь является атрибутом в Django 1.10. Метод до сих пор существует для обратной совместимости, но будет удален в Django 2.0.
для Django 1.9 и старше:
is_authenticated
- это функция. Вы должны назвать это как
if request.user.is_authenticated():
# do something if the user is authenticated
как отметил Питер Роуэлл, то, что может вас запутать, заключается в том, что в языке шаблонов Django по умолчанию вы не ставите скобки для вызова функций. Так вы возможно, вы видели что-то подобное в коде шаблона:
{% if user.is_authenticated %}
однако в коде Python это действительно метод в User
класса.
должен работать следующий блок:
{% if user.is_authenticated %}
<p>Welcome {{ user.username }} !!!</p>
{% endif %}
Джанго 1.10+
использовать атрибут, не методика:
if request.user.is_authenticated: # <- no parentheses any more!
# do something if the user is authenticated
использование метода с тем же именем устарело в Django 2.0 и больше не упоминается в документации Django.
Обратите внимание, что для Django 1.10 и 1.11 значение свойства равно
CallableBool
и не логическое, что может вызвать некоторые странные ошибки.
Например, у меня было представление, которое вернуло JSON
return HttpResponse(json.dumps({
"is_authenticated": request.user.is_authenticated()
}), content_type='application/json')
что после обновления до свойства request.user.is_authenticated
бросал исключение TypeError: Object of type 'CallableBool' is not JSON serializable
. Решением было использовать JsonResponse, который мог правильно обрабатывать объект CallableBool при сериализации:
return JsonResponse({
"is_authenticated": request.user.is_authenticated
})
на ваш взгляд:
{% if user.is_authenticated %}
<p>{{ user }}</p>
{% endif %}
в Вас функции контроллера добавить декоратор:
from django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):