Приложение формирует дайджесты контента для пользователей на основе их подписок. Дайджест представляет собой выборку постов из различных источников, на которые подписан пользователь.
Ендпойнт на запрос GET создает дайджест для пользователя и выдает список постов в формате json.
При создании дайджеста в него войдут только те посты, которые пользователь еще не получал в виде дайджеста (не просматривал).
В запросе можно указать рейтинг постов, в результате в дайджест буду отобраны посты, у которых рейтинге выше либо равен указанному, и которые пользователь еще не просматривал.
Python
Django
Django Rest Framework
drf-yasg
Пакеты:
django-environ - для хранения переменных окружения в файле .env
- Модель User: Хранит данные о пользователе, включая ID и имя. Стандартная модель Django.
- Модель Subscription: Содержит информацию о подписках пользователя, включая ID подписки, название источника и ID пользователя.
- Модель Post: Включает информацию о постах из подписок, включая ID поста, ID подписки, содержание поста, популярность, информацию о том, что пользователь просмотрел этот пост.
- Модель Digest: Содержит информацию о сформированном дайджесте, включая ID дайджеста, список постов, ID пользователя, время создания.
В проекте есть документация Swagger, доступная после запуска приложения по адресу http://127.0.0.1:8000/api/swagger/
GET /api/digest/?userid=value&rating=value
вернет созданный дайджест для пользователя.
Параметры:
userid
- Тип integer. Уникальный id пользователя, для которого будет создан дайджест. Обязательный параметр.rating
- Тип integer. Значение рейтинга постов. Для дайджеста будут отобраны посты, имеющие рейтинг выше или равным указанному. Если параметр не указан в запросе, то будут отобраны все посты, имеющие рейтинг выше либо равный 0.
Если пользователь найден, ответ приходит с кодом 200 OK
и содержит json с уникальным id дайджеста и списком текстов постов:
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"pk": 29,
"posts": [
"Курс доллара на следующей неделе снизится на 1,14 рубля, до 89,78 рубля, евро - на 1,2 рубля, до 100 рублей ровно, курс юаня упадет на 10 копеек, до 12,52 рубля, ожидают опрошенные РИА Новости финансовые эксперты.\r\n\r\nРынок акций, по их прогнозу, за неделю существенно не изменится и останется около уровня 2920 пунктов, а цена на нефть марки Brent вырастет в пределах 1 доллара, до 81,18 доллара за баррель."
]
}
Если пользователь не найден, ответ придет с кодом 404 Not Found
.
- Скопировать файлы:
$ git clone https://github.com/minaton-ru/digest-drf.git
- Создать файл
.env
для переменных окружения DEBUG и SECRET_KEY. Пример файла:
DEBUG=True
SECRET_KEY=''
- Установить зависимости, применить миграции, добавить фикстуры в базу данных:
$ cd digest-drf
$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements.txt
(venv) $ python manage.py migrate
(venv) $ python manage.py loaddata fixture.json
(venv) $ python manage.py runserver
- Открыть в браузере URL c Swagger-документацией
http://127.0.0.1:8000/api/swagger/
, сделать тестовый запрос. - Или перейти на URL
http://127.0.0.1:8000/api/digest/?userid=2&rating=8
, в ответ получить дайджест из новостей с рейтингом >=8. Если после этого сделать запросhttp://127.0.0.1:8000/api/digest/?userid=2&rating=4
, то получим дайджест из новостей с рейтингом >=4, но уже без тех новостей, которые получили в предыдущем дайджесте.
В файле tests.py находятся тесты.
Для запуска тестов:
python manage.py test