Класс UserManager
Класс UserManager является менеджером по умолчанию для модели User в Django. Он наследуется от BaseUserManager и предоставляет удобные методы для создания пользователей и суперпользователей. Основное назначение менеджера - инкапсулировать логику создания пользователей, включая хэширование пароля и установку прав доступа. Методы менеджера принимают обязательные поля модели пользователя, такие как username и email, а также дополнительные атрибуты в виде ключевых аргументов.
Синтаксис
UserManager.create_user(username, email=None, password=None, **extra_fields)
UserManager.create_superuser(username, email=None, password=None, **extra_fields)
Пример . Использование метода create_user
Давайте создадим обычного пользователя с помощью метода create_user:
from 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}")
Результат выполнения кода:
"User created: john_doe"
"Is active: True"
"Is staff: False"
"Is superuser: False"
Пример . Использование метода create_superuser
Давайте создадим суперпользователя с помощью метода create_superuser:
from 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}")
Результат выполнения кода:
"Superuser created: admin"
"Is staff: True"
"Is superuser: True"
Пример . Создание пользователя с дополнительными полями
Давайте создадим пользователя с указанием дополнительных атрибутов, таких как имя и фамилия:
from 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}")
Результат выполнения кода:
"User: Jane Smith"
"Username: jane_smith"
"Email: jane@example.com"
Пример . Обработка ошибок при создании пользователя
Методы менеджера автоматически обрабатывают обязательные поля. Попробуем создать пользователя без имени пользователя:
from 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}")
Результат выполнения кода:
"Error: NOT NULL constraint failed: auth_user.username"
Пример . Проверка пароля созданного пользователя
Пароль пользователя автоматически хэшируется. Проверим это с помощью метода check_password:
from 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]}...")
Результат выполнения кода:
"Password correct: True"
"Password incorrect: False"
"Password hash: pbkdf2_sha256$870000$..."
Смотрите также
-
метод
create_user,
который создает обычного пользователя -
метод
create_superuser,
который создает суперпользователя -
класс
User,
который представляет модель пользователя -
метод
check_password,
который проверяет пароль пользователя