Это драфт приложения для знакомств.
-
Модель участника:
- Поля: пол, имя, фамилия, почта.
- Проверка уникальности электронной почты реализована в клиентском сервисе.
-
Регистрация с загрузкой аватарки:
- Две версии маршрута регистрации:
/api/clients/create2
: Последовательный процесс./api/clients/create
: Асинхронная загрузка аватарки.
- Хеширование пароля с использованием bcrypt для совместимости с авторизацией.
- Добавлены тесты (но на скорую руку, нужно рефакторить)
- Две версии маршрута регистрации:
- Python 3.12: Язык программирования проекта.
- SQLite: Для хранения БД для разработки.
- SQLAlchemy: ORM для взаимодействия с БД.
- Pydantic: Валидация данных и управление входными данными.
- Alembic: Миграции базы данных.
- python-dotenv: Управление переменными окружения.
- bcrypt: Генерация хеша паролей (версия 4.0.1).
Участник имеет следующие поля:
- ID: Уникальный идентификатор.
- Аватар: URL (опционально).
- Пол: 'male' или 'female'.
- Имя: Имя пользователя.
- Фамилия: Фамилия пользователя.
- Почта: Уникальный адрес электронной почты.
- is_active: Поддержка "soft delete".
dating/
├── alembic/ # Скрипты миграций БД
├── alembic.ini # Конфигурация Alembic
├── create_db_once.py # Инициализация БД
├── README.md # Документация проекта
├── requirements.txt # Зависимости
├── run.py # Запуск приложения
├── watermark.png # Пример водяного знака
├── tests # Тесты
│ ├── tests.py # Тестирование роутов
├── src/
│ ├── config/
│ │ ├── database.py # Конфигурация БД
│ │ ├── logging.py # Настройки логирования
│ │ └── settings.py # Общие настройки
│ ├── models/ # ORM-модели
│ ├── routers/ # API маршруты
│ ├── schemas/ # Pydantic схемы
│ ├── services/ # Логика приложения
│ └── __main__.py # Точка входа
├── avatars/ # Аватары пользователей
└── database.db # База данных (файл)
Рекомендуется использовать виртуальное окружение:
-
Склонируйте репозиторий:
git clone https://github.com/sergei-kruchinin/dating.git cd dating
-
Создайте и активируйте виртуальное окружение:
python3 -m venv .venv source .venv/bin/activate
[Windows]
.venv\Scripts\activate
-
Установите зависимости:
pip3 install -r requirements.txt
-
Создайте файл
.env
:DATABASE_URL=sqlite+aiosqlite:///./database.db SECRET_KEY=your_secret_key_here AVATAR_DIR=./avatars AVATAR_URL_PREFIX = avatars WATERMARK_PATH = ./watermark.png
-
Измените
alembic.ini
:sqlalchemy.url = sqlite:////tmp/database.db
-
Инициализируйте базу данных:
python3 create_db_once.py
-
Запустите приложение:
python3 run.py
Используйте Alembic для управления схемой базы данных:
-
Обновить до последней схемы:
alembic upgrade head
-
Создать новую миграцию:
alembic revision --autogenerate -m "Описание изменений"
-
Откатить последнюю миграцию:
alembic downgrade -1
Система логирования настроена для вывода логов с уровнем INFO, включая временные метки и сообщения.
Проект использует пользовательские схемы Pydantic для обработки HTTP ошибок в API. Эти схемы стандартизируют сообщения об ошибках и помогают в отладке:
InternalServerErrorResponse
: Сообщение для ошибок сервера.BadRequestResponse
: Сообщение для неправильных запросов.NotFoundResponse
: Сообщение для несуществующих ресурсов.EmailAlreadyRegisteredResponse
: Сообщение для конфликтов из-за дублирования email.
UserCreate
: Схема для создания нового пользователя, включает валидацию таких полей какemail
иpassword
.UserResponse
: Схема для ответов с данными пользователей, поддерживает ORM.
PasswordHasherProtocol
: Протокол для реализации сервиса хеширования и проверки паролей.
Base
: Базовая декларативная модель для всех ORM-моделей.UserModel
: Представляет таблицуusers
в базе данных с полями какid
,gender
,first_name
,last_name
,email
,hashed_password
иis_active
.
- Создание клиента с аватаром:
- Асинхронный маршрут для создания нового клиента с поддержкой аватаров и водяных знаков.
- http://127.0.0.1:8000/api/clients.
- Создание клиента (последовательное):
- Альтернативный маршрут для последовательного процесса создания клиента.
- http://127.0.0.1:8000/api/clients2
- Получение клиента по ID:
- Маршрут для получения информации о клиенте по его идентификатору.
- http://127.0.0.1:8000/api/clients/{user_id}
- Доступна по адресу http://127.0.0.1:8000/docs.
- Позволяет просматривать доступные API-маршруты и тестировать их.
Этот проект является черновиком и может быть расширен для добавления дополнительных возможностей и улучшения функциональности.
Сергей Кручинин sergeykr@yandex.ru