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