## Кортежи статуса пола GENDER_CHOICES = ( ('n', 'Не указано'), ('m', 'Мужчина'), ('f', 'Женщина'), ) ## Модель пользователя 1. **`first_name`** (CharField): Имя пользователя (до 60 символов). 2. **`last_name`** (CharField): Фамилия пользователя (до 60 символов). 3. `**gender**` (CharField): Пол пользователя (выбор из предустановленных значений). 4. **`email`** (EmailField): Адрес электронной почты пользователя (уникальный). 5. **`username`** (CharField): Никнейм пользователя (до 60 символов). 6. **`bio`** (TextField): О себе (опционально, многострочное поле). 7. **`image`** (URLField): Ссылка на аватар пользователя. 8. **`followers`** (ManyToManyField): Подписчики пользователя. 9. **`address`** (CharField): Адрес пользователя (до 255 символов, опционально). 10. **`date_joined`** (DateTimeField): Дата регистрации пользователя (автоматически). 11. **`last_updated`** (DateTimeField): Время последнего обновления профиля. 12. **`last_login`** (DateTimeField): Время последней авторизации. 13. **`status`** (BooleanField): Статус активности пользователя. ## Сериализатор 1. **UserSerializer**: - `username` (CharField): Никнейм пользователя. - `email` (EmailField): Адрес электронной почты пользователя. - `password` (CharField): Пароль пользователя (только для записи). - `first_name` (CharField): Имя пользователя. - `last_name` (CharField): Фамилия пользователя. - `gender` (ChoiceField): Пол пользователя (выбор из предустановленных значений). - `bio` (TextField): Биография пользователя. - `image` (URLField): URL-адрес аватара пользователя. - `status` (BooleanField): Статус активности пользователя. - Метод `create`: Создание нового пользователя с установкой пароля. - Метод `update`: Обновление информации о пользователе, включая пароль. - Дополнительно: Возвращает JWT-токен при аутентификации пользователя. ## Маршрутизатор 1. **`/users/login`**: - URL для входа в учетную запись. - Обрабатывается функцией `account_login` из модуля `views` в приложении `config.accounts`. - Имеет имя `account-login` для ссылок и представлений. 2. **`/users`**: - URL для регистрации новой учетной записи пользователя. - Обрабатывается функцией `account_registration` из модуля `views` в приложении `config.accounts`. - Имеет имя `account-registration` для ссылок и представлений. 3. **`/user`**: - URL для получения информации о текущем пользователе. - Обрабатывается классом `UserView` как представление, используя методы GET и PUT. - Имеет имя `user-account` для ссылок и представлений. 4. **`/logout/`**: - URL для выхода из учетной записи. - Обрабатывается функцией `signout` из модуля `views` в приложении `config.accounts`. - Имеет имя `logout` для ссылок и представлений. 5. **`/profiles/`**: - URL для работы с профилями пользователей. - Используется вместе с DefaultRouter, который автоматически создает CRUD-маршруты для профилей. - Имеет имя `profiledetailview-list`, `profiledetailview-detail` и т.д. для ссылок и представлений. ## Контроллер (Views и API) 1. **`account_registration`**: - URL: `/users/registration/` (POST) - Описание: Регистрация новой учетной записи пользователя. - Входные данные: JSON объект с данными пользователя. - Выходные данные: JSON объект с данными зарегистрированного пользователя. 2. **`account_login`**: - URL: `/users/login/` (POST) - Описание: Вход пользователя в учетную запись. - Входные данные: JSON объект с email и паролем пользователя. - Выходные данные: JSON объект с данными пользователя и JWT-токеном для аутентификации. 3. **`UserView`**: - URL: `/user/` (GET, PUT) - Описание: Получение информации о текущем пользователе и обновление данных пользователя. - GET: Получение данных пользователя. - PUT: Обновление данных пользователя. 4. **`ProfileDetailView`**: - URL: `/profiles/` (GET, POST, DELETE) - Описание: Управление профилями пользователей. - GET: Получение данных профиля пользователя по его имени пользователя (username). - POST: Добавление пользователя в список подписчиков (followers) или удаление из него. - DELETE: Удаление пользователя из списка подписчиков (followers). 5. **`signout`**: - URL: `/logout/` - Описание: Выход пользователя из учетной записи и перенаправление на главную страницу.