Ответ
Встроенная система аутентификации 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
, чтобы расширить стандартную модель пользователя.