it-swarm.com.ru

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

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

request.user.is_authenticated

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

>

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

request.user.is_active

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

204
Rick

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

435
Brian Neal

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

    {% if user.is_authenticated %}
        <p>Welcome {{ user.username }} !!!</p>       
    {% endif %}
15
Sopan

Джанго 1.10+

Используйте атрибут, not метод:

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
})
14
Mark Chackerian

По вашему мнению:

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

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

from Django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):
1
Cubiczx