Атрибут is_active

Атрибут is_active класса User является булевым полем, которое определяет, считается ли учетная запись пользователя активной. По умолчанию для новых пользователей этот атрибут установлен в True. Отключение этого флага позволяет деактивировать пользователя без удаления его из базы данных. При этом деактивированный пользователь не сможет авторизоваться в системе, но все его данные и связи сохраняются.

Синтаксис

Атрибут доступен для любого экземпляра модели User:

pythonuser.is_active

Значение по умолчанию

При создании пользователя через менеджер create_user или create_superuser атрибут is_active автоматически устанавливается в True:

pythonfrom django.contrib.auth.models import User

user = User.objects.create_user(
  username="john_doe",
  email="john@example.com",
  password="secret123"
)
print(user.is_active)

Результат выполнения кода:

python"True"

Деактивация пользователя

Для деактивации пользователя достаточно установить атрибут is_active в False и сохранить изменения:

pythonfrom django.contrib.auth.models import User

user = User.objects.get(username="john_doe")
user.is_active = False
user.save()

print(user.is_active)

Результат выполнения кода:

python"False"

После этого пользователь не сможет войти в систему, так как метод authenticate проверяет этот флаг.

Проверка активности

При авторизации Django автоматически проверяет атрибут is_active. Если он равен False, вход будет отклонен:

pythonfrom 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")

Результат выполнения кода:

python"Authentication failed or user inactive"

Фильтрация активных пользователей

Атрибут is_active часто используется для фильтрации пользователей в запросах:

pythonfrom django.contrib.auth.models import User

active_users = User.objects.filter(is_active=True)
for user in active_users:
  print(user.username)

Результат выполнения кода:

python"admin"
"jane_smith"
"bob_wilson"

Программная активация

Активация пользователя выполняется аналогичным образом:

pythonfrom 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")

Результат выполнения кода:

python"User john_doe activated"

Особенности использования

Важно отметить, что атрибут is_active не удаляет пользователя и не влияет на его данные. Это делает его идеальным инструментом для временной блокировки аккаунтов. Также этот флаг используется в методах has_perm и has_module_perms, которые возвращают False для неактивных пользователей:

pythonfrom 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"))

Результат выполнения кода:

python"Inactive users have no permissions"
"False"

Смотрите также

  • класс User,
    основная модель для работы с пользователями в Django
  • метод has_perm,
    проверяет наличие права у пользователя
  • метод get_full_name,
    возвращает полное имя пользователя
  • атрибут is_staff,
    указывает, имеет ли пользователь доступ к админ-панели