Класс UserManager

Класс UserManager является менеджером по умолчанию для модели User в Django. Он наследуется от BaseUserManager и предоставляет удобные методы для создания пользователей и суперпользователей. Основное назначение менеджера - инкапсулировать логику создания пользователей, включая хэширование пароля и установку прав доступа. Методы менеджера принимают обязательные поля модели пользователя, такие как username и email, а также дополнительные атрибуты в виде ключевых аргументов.

Синтаксис

pythonUserManager.create_user(username, email=None, password=None, **extra_fields)
UserManager.create_superuser(username, email=None, password=None, **extra_fields)

Пример . Использование метода create_user

Давайте создадим обычного пользователя с помощью метода create_user:

pythonfrom django.contrib.auth.models import User

# Create a regular user
user = User.objects.create_user(
    username='john_doe',
    email='john@example.com',
    password='securepassword123'
)

# Check if user was created successfully
print(f"User created: {user.username}")
print(f"Is active: {user.is_active}")
print(f"Is staff: {user.is_staff}")
print(f"Is superuser: {user.is_superuser}")

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

python"User created: john_doe"
"Is active: True"
"Is staff: False"
"Is superuser: False"

Пример . Использование метода create_superuser

Давайте создадим суперпользователя с помощью метода create_superuser:

pythonfrom django.contrib.auth.models import User

# Create a superuser
superuser = User.objects.create_superuser(
    username='admin',
    email='admin@example.com',
    password='adminpassword123'
)

# Check superuser attributes
print(f"Superuser created: {superuser.username}")
print(f"Is staff: {superuser.is_staff}")
print(f"Is superuser: {superuser.is_superuser}")

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

python"Superuser created: admin"
"Is staff: True"
"Is superuser: True"

Пример . Создание пользователя с дополнительными полями

Давайте создадим пользователя с указанием дополнительных атрибутов, таких как имя и фамилия:

pythonfrom django.contrib.auth.models import User

# Create user with extra fields
user = User.objects.create_user(
    username='jane_smith',
    email='jane@example.com',
    password='janepass456',
    first_name='Jane',
    last_name='Smith'
)

# Display user details
print(f"User: {user.get_full_name()}")
print(f"Username: {user.get_username()}")
print(f"Email: {user.email}")

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

python"User: Jane Smith"
"Username: jane_smith"
"Email: jane@example.com"

Пример . Обработка ошибок при создании пользователя

Методы менеджера автоматически обрабатывают обязательные поля. Попробуем создать пользователя без имени пользователя:

pythonfrom django.contrib.auth.models import User
from django.db import IntegrityError

try:
    # Attempt to create user without username
    user = User.objects.create_user(
        username=None,
        email='test@example.com',
        password='test123'
    )
except IntegrityError as e:
    print(f"Error: {e}")

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

python"Error: NOT NULL constraint failed: auth_user.username"

Пример . Проверка пароля созданного пользователя

Пароль пользователя автоматически хэшируется. Проверим это с помощью метода check_password:

pythonfrom django.contrib.auth.models import User

# Create user
user = User.objects.create_user(
    username='testuser',
    password='mypassword123'
)

# Check password
print(f"Password correct: {user.check_password('mypassword123')}")
print(f"Password incorrect: {user.check_password('wrongpassword')}")

# Password is hashed, not stored in plain text
print(f"Password hash: {user.password[:30]}...")

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

python"Password correct: True"
"Password incorrect: False"
"Password hash: pbkdf2_sha256$870000$..."

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

  • метод create_user,
    который создает обычного пользователя
  • метод create_superuser,
    который создает суперпользователя
  • класс User,
    который представляет модель пользователя
  • метод check_password,
    который проверяет пароль пользователя