Пользователи (users)🔗
Назначение🔗
Приложение users содержит:
- Кастомную модель пользователя
CustomUser, заменяющую стандартную Django-модель; - Логику авторизации (login/logout);
- Эндпоинт для получения информации о текущем пользователе.
Все связанные компоненты (модели, сериализаторы, представления) находятся в пределах одного приложения.
Основные модели и сущности🔗
CustomUser🔗
| Поле | Тип | Назначение |
|---|---|---|
balance_cached | DecimalField | Кэшированное значение баланса пользователя. Не является источником истины, но используется для ускоренного доступа. Обновляется при транзакциях. |
Связи и использование🔗
CustomUserиспользуется какAUTH_USER_MODELпо всему проекту.- Баланс (
balance_cached) читается напрямую там, где нужен быстрый доступ (например, в API-ответах и интерфейсах). - Обновление баланса выполняется при изменениях через связанные микросервисы и приложения (например,
billingилиdata_service).
Особенности🔗
balance_cached— это вспомогательное поле. Реальный баланс может отличаться, сверка будет выполняться отдельно. (Пока не реализоано)- Все действия с пользователями, включая аутентификацию и чтение профиля, централизованы в этом приложении.
- При логине/логауте используется сессионная механика Django с CSRF.
Админка🔗
- Используется
CustomUserAdmin, основанный на стандартномUserAdmin. - В админке, помимо всех основных полей стандартной модели юзера, отображается поле
balance_cached(только для чтения). - Поле добавлено в отдельную секцию
"Дополнительно".
API🔗
Общая информация🔗
Аутентификация реализована вручную через DRF. Используется сессионный механизм Django — после логина устанавливается sessionid, все запросы требуют CSRF.
Эндпоинты🔗
Авторизация по username и password. Успешный ответ включает данные пользователя и устанавливает cookie sessionid.
Выход из системы. Удаляет сессию. Требуется валидная сессия и CSRF.
Пример ответа:
{
"id": 1,
"username": "dev",
"email": "dev@mail.ru",
"first_name": "",
"last_name": "",
"date_joined": "2025-02-05 10:10:54",
"last_login": "2025-02-27 09:43:38",
"is_staff": true,
"is_superuser": true
}
Возвращает информацию о текущем пользователе. Требует сессию + CSRF. Используется на фронте для отображения авторизованного состояния.
Использование🔗
- Фронтенд использует авторизацию, логаут и
/profile/для отображения интерфейса под пользователя. - Админка — для управления пользователями вручную.
- Микросервисы не обращаются напрямую к модели
CustomUser. Все запросы к данным пользователей выполняются черезdata_service, который имеет прямой доступ к базе Django.