Как проверить, вошел ли пользователь в систему (как правильно использовать user.is_authenticated)? - PullRequest
210 голосов
/ 05 сентября 2010

Я просматриваю этот сайт , но просто не могу понять, как это сделать, так как он не работает. Мне нужно проверить, зарегистрирован ли текущий пользователь сайта (аутентифицирован) и пытается:

request.user.is_authenticated

несмотря на то, что пользователь вошел в систему, он возвращает только:

>

Я могу делать другие запросы (из первого раздела в URL выше), например:

request.user.is_active

, который возвращает успешный ответ.

Ответы [ 5 ]

455 голосов
/ 05 сентября 2010

Обновление для 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.

18 голосов
/ 08 декабря 2017

Django 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
})
15 голосов
/ 02 августа 2016

Должен работать следующий блок:

    {% if user.is_authenticated %}
        <p>Welcome {{ user.username }} !!!</p>       
    {% endif %}
2 голосов
/ 02 марта 2018

На ваш взгляд:

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

В функции контроллера добавьте декоратор:

from django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):
0 голосов
/ 29 декабря 2018

Для Django 2.0 + версий используйте:

    if request.auth:
       # Only for authenticated users.

Для получения дополнительной информации посетите https://www.django -rest-framework.org / api-guide / запросы / # auth

request.user.is_authenticated () был удален в версиях Django 2.0+.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...