Ответ
Встроенная система аутентификации Django является частью философии «batteries-included» и предоставляет готовый набор инструментов для управления пользователями, группами и правами доступа.
Ключевые компоненты:
-
Модель
User(django.contrib.auth.models.User)- Стандартная модель для хранения информации о пользователе (имя, пароль, email, флаги
is_staff,is_superuserи т.д.). - Пароли хранятся в виде хэша (по умолчанию используется PBKDF2).
- Стандартная модель для хранения информации о пользователе (имя, пароль, email, флаги
-
Механизм аутентификации
- Функция
authenticate(request, username=..., password=...)проверяет учетные данные пользователя и возвращает объектUserв случае успеха илиNone.
- Функция
-
Управление сессиями
- Функции
login(request, user)иlogout(request)управляют сессией пользователя.loginпривязывает пользователя к текущей сессии, аlogout— отвязывает.
- Функции
-
Контроль доступа
- Декоратор
@login_requiredдля представлений-функций и миксинLoginRequiredMixinдля представлений-классов ограничивают доступ только для аутентифицированных пользователей.
- Декоратор
Пример полного цикла:
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
# Проверка данных и вход
def login_view(request, username, password):
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Пользователь успешно вошел в систему
return True
return False
# Представление, доступное только авторизованным пользователям
@login_required
def protected_view(request):
# Логика для авторизованного пользователя
return f"Hello, {request.user.username}!"
# Выход из системы
def logout_view(request):
logout(request)
Для кастомизации рекомендуется наследовать от AbstractUser или AbstractBaseUser, чтобы расширить стандартную модель пользователя.