Перейти к содержанию

Пользователи (users)🔗

Назначение🔗

Приложение users содержит:

  • Кастомную модель пользователя CustomUser, заменяющую стандартную Django-модель;
  • Логику авторизации (login/logout);
  • Эндпоинт для получения информации о текущем пользователе.

Все связанные компоненты (модели, сериализаторы, представления) находятся в пределах одного приложения.


Основные модели и сущности🔗

CustomUser🔗

class CustomUser(AbstractUser):
    balance_cached = models.DecimalField(...)
Поле Тип Назначение
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.

Эндпоинты🔗

POST /auth/login/

Авторизация по username и password. Успешный ответ включает данные пользователя и устанавливает cookie sessionid.

POST /auth/logout/

Выход из системы. Удаляет сессию. Требуется валидная сессия и CSRF.

GET /api/v1/profile/

Пример ответа:

{
    "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.