Проверка статуса пользователя в Django: request.user.is_authenticated

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для определения, авторизован ли пользователь в Django, достаточно проверить свойство request.user.is_authenticated. Если пользователь авторизован, это свойство возвращает истину, в противном случае — ложь. Пример использования в функции представления:

Python
Скопировать код
def my_view(request):
    if request.user.is_authenticated:
        return HttpResponse("Добро пожаловать обратно!")
    else:
        return HttpResponse("Пожалуйста, авторизуйтесь.")

Для контроля доступа используйте проверку if request.user.is_authenticated в функциях представлений.

Кинга Идем в IT: пошаговый план для смены профессии

Где и когда производить аутентификацию

В начале функций-представлений для авторизованных пользователей следует выполнять проверку аутентификации. Для этого можно использовать декоратор @login_required, который отсечет неавторизованных пользователей.

Python
Скопировать код
from django.contrib.auth.decorators import login_required

@login_required
def my_secure_view(request):
    # ваш код функции-представления тут

Для классовых представлений (CBV) используйте миксин LoginRequiredMixin с той же целью.

Защита содержимого (шаблоны)

В шаблонах Django можно использовать {% if user.is_authenticated %} для контроля доступа к содержимому. Убедитесь, что переменная user корректно передана в шаблон.

django
Скопировать код
{% if user.is_authenticated %}
    Добро пожаловать, {{ user.username }}!
{% else %}
    <a href="{% url 'login' %}">Авторизуйтесь</a>
{% endif %}

Если возникают проблемы, убедитесь, что пользователь присутствует в контексте и в синтаксисе нет ошибок.

Визуализация

Можно считать user.is_authenticated вашим личным портье:

Markdown
Скопировать код
**Вход в дом (🏠):**
| Состояние            | Действие       | Результат                |
| -------------------- | -------------- | ----------------------- |
| **Есть ключ** 🔑      | Пытаемся войти | 🟢 Добро пожаловать!   |
| **Ключа нет** 🗝️❌    | Пытаемся войти | 🔴 Вход запрещён. Авторизуйтесь. |

А на сайте user.is_authenticated выполняет роль "дверника":

Markdown
Скопировать код
if user.is_authenticated:
    print('Доступ разрешён: Добро пожаловать домой! 🏠🟢')
else:
    print('Доступ запрещён: Пожалуйста, авторизуйтесь. 🔴')

Как перед входом в дом проверяется наличие ключей, так и user.is_authenticated в Django проверяет токен аутентификации перед доступом к приватным представлениям.

Обработка JSON-ответов

При работе с JsonResponse и user.is_authenticated иногда необходимо преобразовать значение последнего в простой булев тип, поскольку это выражение может быть упакованным в специальный тип – CallableBool:

Python
Скопировать код
return JsonResponse({
    "is_authenticated": bool(request.user.is_authenticated)
})

Полезные материалы

Подробнее по теме можно узнать из: официальной документации Django; руководств по системе аутентификации; справочника по API модели User; уроков на сайтах Real Python, Simple is Better Than Complex и MDN; а также из обзора работы с миксином LoginRequiredMixin для классовых представлений.