Как проверить, вошел ли пользователь в систему (как правильно использовать пользователя.аутентифицируется)?

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

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):