Данный проект в дальнейшем можно оптимизировать. Сайт направлен на подготовку API для онлайн-платформы встреч. Для работы и проверки сервера на части API также использовался Postman.
- Подготовлена модель пользователя с необходимыми полями: имя, фамилия, пол,
аватар, почта и поля с местоположением пользователя (долгота и широта).
Подготовлена дополнительная модель "UserRelations" для объединения понравившихся друг другу пользователей - API: /api/clients/create для регистрации пользователя.
Но для удобства подключен и настроен Djoser для дальнейшей интеграции проекта с фронтендом и подтверждением действий через JWT токены. - При регистрации пользователя аватарка обрабатывается:
- изменяются размеры под требования (не более 250x250 - можно регулировать).
- создается папка пользователя с уникальным именем, куда грузится картинка для дальнейшей удобной эксплуатации бекенда.
- при сохранении добавляется водяной знак через библиотеку Pillow.
- API: /api/clients/{id}/match добавление пользователей в категорию - нравятся (поле match_persons в
таблице UserRelations). Продумана логика, что если Вы уже находитесь в match_persons, то у Вас образуется взаимосвязь (поле liked_persons) и отправляется письмо клиенту с фразой «Вы понравились <клиенту! Почта участника: <почта>.
- Настроены Celery + Redis для отправки письма.
- API: /api/list отображение пользователей с возможностью фильтрации (по имени, полу, фамилии) через библиотеку django-filters.
- Реализована идея поиска ближайших от клиента пользователей через специальный кастомный фильтр.
Реализована сложная функция по расчету дальности клиентов в км. Great Circle Distance: def dist_between_two_lat_lon(*args):
- Сайт загружен на хостинг на облачном сервере. Выполнена настройка с Nginx. Отображается статика(админка, swagger)
ДЛЯ ДОСТУПА В АДМИН ПАНЕЛЬ:
Уже подготовлены пользователи с введенными координатами для тестирования.
хостинг: http://194.67.93.4/admin/ http://194.67.93.4/swagger/
логин: eraspb@mail.ru
пароль: 1221
Важный момент- отправка почты - корректно - работает на локальном сервисе (код прописан верно), но smtp.gmail.com блокирует хостинг,
где поставлен сайт. В дальнейшем будет заменен gmail на другую почту
Дополнительная работа по серверу:
- Хранение всей чувствительной информации в .env, настройка .gitignore.
- Настройка и подключение Swagger для удобства просмотра документации проекта.
- Настройка и подключение Debud Toolbar.
- Подключение Celery и Redis.
- Создание Dockerfile и docker-compose.yml для запуска проекта.
- PrintScreen результата:
- Скачайте репозиторий.
git clone https://github.com/ERAalex/backend_test_dating_server -b main
- Установите зависимости.
pip install -r requirements.txt
- Настройка переменных окружения. Перед запуском проекта необходимо создать файл
.env
в директорииcore
.
внимание: вы можете развернуть postgresql в контейнере, если Вам так удобно.
[settings]
SECRET_KEY =
DEBUG_STATUS =
[database]
DB_ENGINE =
DB_NAME =
DB_PASS =
DB_USER =
DB_HOST =
DB_PORT =
[email_host]
EMAIL_HOST =
EMAIL_HOST_USER =
EMAIL_HOST_PASSWORD =
EMAIL_PORT =
EMAIL_USE_TLS =
- Проведите первые миграции и запустите проект
python manage.py migrate
Ваши шаги до запуска docker-compose:
- до запуска docker-compose измените в settings параметры в коде, они подписаны. Например:
"HOST": "db"
CELERY_BROKER_URL = 'redis://redis:...'
- создайте файл .env для переменных окружения рядом с docker-compose.yml, запишите необходимые данные.
- проект готов к контейниризации. Наберите комманду:
docker-compose up -d
Ваши шаги после запуска docker-compose:
- проверьте и настройте БД (например удобно через контейнер PgAdmin http://localhost:5050/).
- зайдите в контейнер с проектом и создайте пользователя superuser для удобства работы и контроля админ панели.
**** Это начальная версия проекта, поэтому я буду рад Вашим комментариям и рекомендациям по улучшению.