Django API.

Project - Dating Web Server



Информация о проекте.

Данный проект в дальнейшем можно оптимизировать. Сайт направлен на подготовку API для онлайн-платформы встреч. Для работы и проверки сервера на части API также использовался Postman.

Стек технологий: Django REST Framework, PostgreSQL, Celery, Redis.

Выполненные моменты.

  1. Подготовлена модель пользователя с необходимыми полями: имя, фамилия, пол, аватар, почта и поля с местоположением пользователя (долгота и широта).
    Подготовлена дополнительная модель "UserRelations" для объединения понравившихся друг другу пользователей
  2. API: /api/clients/create для регистрации пользователя.
    Но для удобства подключен и настроен Djoser для дальнейшей интеграции проекта с фронтендом и подтверждением действий через JWT токены.
  3. При регистрации пользователя аватарка обрабатывается:
  • изменяются размеры под требования (не более 250x250 - можно регулировать).
  • создается папка пользователя с уникальным именем, куда грузится картинка для дальнейшей удобной эксплуатации бекенда.
  • при сохранении добавляется водяной знак через библиотеку Pillow.
  1. API: /api/clients/{id}/match добавление пользователей в категорию - нравятся (поле match_persons в
    таблице UserRelations). Продумана логика, что если Вы уже находитесь в match_persons, то у Вас образуется взаимосвязь (поле liked_persons) и отправляется письмо клиенту с фразой «Вы понравились <клиенту! Почта участника: <почта>.
  • Настроены Celery + Redis для отправки письма.
  1. API: /api/list отображение пользователей с возможностью фильтрации (по имени, полу, фамилии) через библиотеку django-filters.
  2. Реализована идея поиска ближайших от клиента пользователей через специальный кастомный фильтр. Реализована сложная функция по расчету дальности клиентов в км. Great Circle Distance: def dist_between_two_lat_lon(*args):

  3. Сайт загружен на хостинг на облачном сервере. Выполнена настройка с Nginx. Отображается статика(админка, swagger) ДЛЯ ДОСТУПА В АДМИН ПАНЕЛЬ:
    Уже подготовлены пользователи с введенными координатами для тестирования.
хостинг: http://194.67.93.4/admin/    http://194.67.93.4/swagger/
логин: eraspb@mail.ru  
пароль: 1221

Важный момент- отправка почты - корректно - работает на локальном сервисе (код прописан верно), но smtp.gmail.com блокирует хостинг, где поставлен сайт. В дальнейшем будет заменен gmail на другую почту

Дополнительная работа по серверу:

  1. Хранение всей чувствительной информации в .env, настройка .gitignore.
  2. Настройка и подключение Swagger для удобства просмотра документации проекта.
  3. Настройка и подключение Debud Toolbar.
  4. Подключение Celery и Redis.
  5. Создание Dockerfile и docker-compose.yml для запуска проекта.
  • PrintScreen результата:

1. Подготовка к запуску проекта

  • Скачайте репозиторий.
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

2. Запуск через docker-compose

Ваши шаги до запуска 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 для удобства работы и контроля админ панели.

**** Это начальная версия проекта, поэтому я буду рад Вашим комментариям и рекомендациям по улучшению.

  • мой телеграм --->