Атрибут is_active
Атрибут is_active класса User является булевым полем, которое определяет, считается ли учетная запись пользователя активной. По умолчанию для новых пользователей этот атрибут установлен в True. Отключение этого флага позволяет деактивировать пользователя без удаления его из базы данных. При этом деактивированный пользователь не сможет авторизоваться в системе, но все его данные и связи сохраняются.
Синтаксис
Атрибут доступен для любого экземпляра модели User:
user.is_active
Значение по умолчанию
При создании пользователя через менеджер create_user или create_superuser атрибут is_active автоматически устанавливается в True:
from django.contrib.auth.models import User
user = User.objects.create_user(
username="john_doe",
email="john@example.com",
password="secret123"
)
print(user.is_active)
Результат выполнения кода:
"True"
Деактивация пользователя
Для деактивации пользователя достаточно установить атрибут is_active в False и сохранить изменения:
from django.contrib.auth.models import User
user = User.objects.get(username="john_doe")
user.is_active = False
user.save()
print(user.is_active)
Результат выполнения кода:
"False"
После этого пользователь не сможет войти в систему, так как метод authenticate проверяет этот флаг.
Проверка активности
При авторизации Django автоматически проверяет атрибут is_active. Если он равен False, вход будет отклонен:
from django.contrib.auth import authenticate
user = authenticate(
username="john_doe",
password="secret123"
)
if user is not None and user.is_active:
print("User is active and authenticated")
else:
print("Authentication failed or user inactive")
Результат выполнения кода:
"Authentication failed or user inactive"
Фильтрация активных пользователей
Атрибут is_active часто используется для фильтрации пользователей в запросах:
from django.contrib.auth.models import User
active_users = User.objects.filter(is_active=True)
for user in active_users:
print(user.username)
Результат выполнения кода:
"admin"
"jane_smith"
"bob_wilson"
Программная активация
Активация пользователя выполняется аналогичным образом:
from django.contrib.auth.models import User
user = User.objects.get(username="john_doe")
user.is_active = True
user.save()
print(f"User {user.username} activated")
Результат выполнения кода:
"User john_doe activated"
Особенности использования
Важно отметить, что атрибут is_active не удаляет пользователя и не влияет на его данные. Это делает его идеальным инструментом для временной блокировки аккаунтов. Также этот флаг используется в методах has_perm и has_module_perms, которые возвращают False для неактивных пользователей:
from django.contrib.auth.models import User
user = User.objects.get(username="john_doe")
if not user.is_active:
print("Inactive users have no permissions")
print(user.has_perm("auth.change_user"))
Результат выполнения кода:
"Inactive users have no permissions"
"False"
Смотрите также
-
класс
User,
основная модель для работы с пользователями в Django -
метод
has_perm,
проверяет наличие права у пользователя -
метод
get_full_name,
возвращает полное имя пользователя -
атрибут
is_staff,
указывает, имеет ли пользователь доступ к админ-панели