API-сервис для сайта знакомств.
Хост развернутого проекта: http://2.57.187.13/
- скоро будет доступен на https://manydates.ml
- Пользователи регистрируются и проходят авторизацию по логину и паролю.
- Модели пользователей имеют обязательные поля:
аватар | пол | имя и фамилия | электронная почта | долгота и широта
*на картинку аватара при регистрации накладывается водяной знак. - Авторизованные пользователь должны иметь возможность:
1) отмечать понравившихся пользователей. Если возникает взаимная
симпатия, то на емеил обоих отправляется уведомление об этом.
2) выводить и фильтровать список всех пользователей по полу, имени,
фамилии, а также выводить пользователей в пределах заданной дистанции. - Запросы к БД должны быть оптимизированы.
Django 4.0.2
Django REST framework 3.13.1
Python 3.10.5
Redis 4.2.2
- На GitHub делаем себе fork и клонируем репозиторий через протокол HTTPS или SSH (не забываем создать виртуальное окружение), например:
git clone https://github.com/<your-github-profile>/dating-site
- Создаём файлы с секретами
.env.db
,.env.local
и.env.prod
из копий.env.example
и.env.db.example
в папке проекта./.envs/
- Собраем контейнеры локально:
docker-compose -f docker-compose.local.yaml up -d --build
Или на хосте:
docker-compose -f docker-compose.prod.yaml up -d --build
При успешном создании контейнеров в терминале должен быть статус в терминале:
Successfully tagged dating-site_nginx:latest
Creating dating-site_db_1 ... done
Creating dating-site_redis_1 ... done
Creating dating-site_web_1 ... done
Creating dating-site_nginx_1 ... done
Attaching to dating-site_db_1, dating-site_redis_1, dating-site_web_1, dating-site_nginx_1
Можно использовать встроенный Swagger или направить HTTP-запросы в соответствии с правами доступа и эндпоинтам через любой инструмент тестирования.
Для созданя фиктивных данных исользуйте команду управления manage.py:
python manage.py dummy_data_maker
-
Регистрация нового клиента:
/api/clients/create/
-
Оценивание участником другого участника:
/api/clients/{client_id}/match/
-
Просмотр списка участников:
/api/list/
Фильтрацию списка можно произвести по полу, имени, фамилии,
а также фильтровать участников в пределах заданной дистанции
относительно авторизованного пользователя.
Для фильтрации списка участников используйте ключи в соотвествии с таблицей:
Фильтр | Ключ |
---|---|
по полу: | /?gender= |
по имени: | /?first_name= |
по фамилии: | /?last_name= |
по дистанции, км: | /?get_in_distance_km= |
В проекте использована базовая авторизация: по логину и паролю.
- создать аккаунт
- входить в систему под своим логином и паролем;
- оценивать других участников;
- просматривать и фильтровть список участников.
Запросы к API начинаются с «/api/»
- Регистрация участника:
POST-запрос:/clients/create/
Request sample:
{
"email": "man0@fake.ru",
"username": "man0",
"password": "pass_man",
"first_name": "name0",
"last_name": "surname0",
"avatar": "avatar.jpg",
"gender": "М",
"longitude": 36.57912284676751,
"latitude": 50.61301720349709
}
Response sample (201):
{
"id": 2,
"username": "man0",
"email": "man0@fake.ru",
"first_name": "man0",
"last_name": "man0",
"avatar": "https://manydates.ml/media/clients/avatar.jpg",
"gender": "М",
"is_match": false,
"longitude": 36.57912284676751,
"latitude": 50.61301720349709
}
Response sample (400):
{
"email": [
"пользователь с таким e-mail уже существует."
],
"username": [
"Обязательное поле."
]
}
- Создание отметки у участника:
GET-запрос:/clients/2/match/
Response sample: (200)
{
"follower": 1,
"person": 2
}
- Удаление отметки у участника:
DELETE-запрос:/clients/2/match/
Response sample: (204)
<no content>
- Фильтр по списку участников:
GET-запрос:/list/?gender=М&first_name=man0&last_name=man0
Response sample: (200)
[
{
"id": 2,
"username": "man0",
"email": "man0@fake.ru",
"first_name": "man0",
"last_name": "man0",
"avatar": "https://manydates.ml/media/clients/man_symbol.jpg",
"gender": "М",
"is_match": false,
"longitude": 36.57912284676751,
"latitude": 50.61301720349709
}
]
Немыкин Евгений
nonwander@gmail.com
Telegram: @nonwander