Проверка статуса пользователя в Django: request.user.is_authenticated
Быстрый ответ
Для определения, авторизован ли пользователь в Django, достаточно проверить свойство request.user.is_authenticated
. Если пользователь авторизован, это свойство возвращает истину, в противном случае — ложь. Пример использования в функции представления:
def my_view(request):
if request.user.is_authenticated:
return HttpResponse("Добро пожаловать обратно!")
else:
return HttpResponse("Пожалуйста, авторизуйтесь.")
Для контроля доступа используйте проверку if request.user.is_authenticated
в функциях представлений.
Где и когда производить аутентификацию
В начале функций-представлений для авторизованных пользователей следует выполнять проверку аутентификации. Для этого можно использовать декоратор @login_required
, который отсечет неавторизованных пользователей.
from django.contrib.auth.decorators import login_required
@login_required
def my_secure_view(request):
# ваш код функции-представления тут
Для классовых представлений (CBV) используйте миксин LoginRequiredMixin
с той же целью.
Защита содержимого (шаблоны)
В шаблонах Django можно использовать {% if user.is_authenticated %}
для контроля доступа к содержимому. Убедитесь, что переменная user
корректно передана в шаблон.
{% if user.is_authenticated %}
Добро пожаловать, {{ user.username }}!
{% else %}
<a href="{% url 'login' %}">Авторизуйтесь</a>
{% endif %}
Если возникают проблемы, убедитесь, что пользователь присутствует в контексте и в синтаксисе нет ошибок.
Визуализация
Можно считать user.is_authenticated
вашим личным портье:
**Вход в дом (🏠):**
| Состояние | Действие | Результат |
| -------------------- | -------------- | ----------------------- |
| **Есть ключ** 🔑 | Пытаемся войти | 🟢 Добро пожаловать! |
| **Ключа нет** 🗝️❌ | Пытаемся войти | 🔴 Вход запрещён. Авторизуйтесь. |
А на сайте user.is_authenticated
выполняет роль "дверника":
if user.is_authenticated:
print('Доступ разрешён: Добро пожаловать домой! 🏠🟢')
else:
print('Доступ запрещён: Пожалуйста, авторизуйтесь. 🔴')
Как перед входом в дом проверяется наличие ключей, так и user.is_authenticated
в Django проверяет токен аутентификации перед доступом к приватным представлениям.
Обработка JSON-ответов
При работе с JsonResponse
и user.is_authenticated
иногда необходимо преобразовать значение последнего в простой булев тип, поскольку это выражение может быть упакованным в специальный тип – CallableBool:
return JsonResponse({
"is_authenticated": bool(request.user.is_authenticated)
})
Полезные материалы
Подробнее по теме можно узнать из: официальной документации Django; руководств по системе аутентификации; справочника по API модели User; уроков на сайтах Real Python, Simple is Better Than Complex и MDN; а также из обзора работы с миксином LoginRequiredMixin для классовых представлений.