Ответ
Встроенная система аутентификации 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, чтобы расширить стандартную модель пользователя.
Ответ 18+ 🔞
Да ты посмотри, что эти джанговские ребята придумали! Прям как в хорошей советской столовой — всё включено, бери и пользуйся, не хуй собачий! Система аутентификации у них — это готовая «батарейка», которая из коробки умеет возиться с пользователями, группами и всякими правами доступа. Красота, ёпта!
Из чего же, из чего же это всё сделано:
-
Модель
User(django.contrib.auth.models.User) Это типа стандартный шаблон для юзера. Туда пихается всё: имя, пароль (который, кстати, хранится в виде хэша, чтоб его не спиздили), почта и разные флажки вродеis_staff(штатный ли сотрудник) илиis_superuser(царь и бог). -
Механизм аутентификации Есть волшебная функция
authenticate(request, username=..., password=...). Ты ей логин и пароль суёшь, а она тебе, если всё совпало, возвращает живого пользователя. Если нет —None, иди гуляй, мудак. -
Управление сессиями Тут две простые как три копейки функции:
login(request, user)— привязывает юзера к сессии (типа «запомни меня, братан»), иlogout(request)— отвязывает нахуй, чтоб не мозолил глаза. -
Контроль доступа Чтобы всякие левые не лазили куда не надо, есть декоратор
@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):
# Тут уже можно доверять, что request.user — наш чувак
return f"Hello, {request.user.username}!"
# Ну всё, свободен, иди отсюда
def logout_view(request):
logout(request)
А если тебе стандартный юзер как тесные семейные трусы — можно его расширить, наследовавшись от AbstractUser или даже AbstractBaseUser. Добавь туда хоть дату рождения, хоть размер обуви — полная свобода, блядь! Главное — не накосячить с миграциями, а то будет тебе овердохуища проблем.