Skip to content

Latest commit

 

History

History
61 lines (41 loc) · 6.21 KB

task-7.md

File metadata and controls

61 lines (41 loc) · 6.21 KB

Домашнее задание 7

Дополнительные функции

Целью домашнего задания является исследование технологии Comet и механизма кэширования данных.

1. Real-time сообщения

Необходимо реализовать рассылку мгновенных сообщений о новых ответах всем пользователям, находящимся на странице определенного вопроса. Допустим есть два пользователя A и B. Оба находятся на странице одного вопроса, например /question/33. Пользователь A добавляет ответ на этот вопрос, пользователь B должен увидеть ответ без перезагрузки страницы.

Для этого необходимо:

  • Настроить сервер Сentrifugo.
  • На странице вопроса добавить JavaScript опрашивающий Сentrifugo сервер. В состав Сentrifugo входят JavaScript-библиотеки, их необходимо использовать для создания корректного соединения с сервером Сentrifugo по протоколу websocket.
  • В форме добавления ответа добавить код, отправляющий сообщения в Сentrifugo, например с помощью библиотеки requests.

2. Кэширование и фоновый запуск

Необходимо подготовить и вывести данные для правой колонки (лучшие пользователи, популярные теги). Популярные теги - это 10 тегов с самым большим количеством вопросов за последние 3 месяца. Лучшие пользователи - это 10 пользователей задавших самые популярные вопросы или давших самые популярные ответы за последнюю неделю.

Так как запросы на предполагаются тяжелыми, необходимо кэшировать данные на диске или memcached. Вьюшки не должны запускать эти запросы, а только брать данные из кэша. Для кэширования можно использовать встроенные механизмы Django.

Так как данные необходимы на каждой страницы, их придется загружать в каждой вьюшке, либо можно расширить шаблонизатор своими (inclusion) тегами. Наполнять кэш данными необходимо с помощью Management команды, запускаемой из Cron.

3. Полнотекстовый поиск

Необходимо реализовать поиск по заголовкам и содержимому вопросов. Пользователь вводит текст в поисковой строке, которая находиться в шапке. По введенному тексту СУБД должна находить совпадения, используя полнотекстовые индексы. Результаты поиска отображаются пользователю в виде поисковых подсказок (выпадающий список под поисковой строкой).

Запрос должен отправляться автоматически по мере ввода пользователем частей текста. Необходимо удостовериться, что мы не перегружаем сервер лишними запросами, отправляя запрос на каждый новый введенный символ во время печати.

4. Баллы

Максимальные баллы за ДЗ - 20 баллов

Real-time сообщения - 8:

  • настройка сервера Centrifugo - 3;
  • подключение клиентской части для работы с Сentrifugo - 3;
  • отправка новых ответов на вопрос через requests - 2.

Блок популярные теги - 4:

  • правильный расчет тегов - 2;
  • предварительный расчет по cron - 2 (просто кеширование - 1).

Блок лучшие пользователи - 4:

  • правильный расчет пользователей - 2;
  • предварительный расчет по cron - 2 (просто кеширование - 1).

Поиск по заголовку и содержимому вопроса - 4:

  • корректная работа поиска - 1;
  • поисковые подсказки - 1;
  • отправка данных на сервер по мере ввода - 1;
  • ожидание ввода всех символов пользователем - 1.

5. Полезные ссылки