Задачи, Статьи, Недельный Python Дайджест, FAQ, Курсы по Python, Видео-уроки, Скринкасты
Пишем web-проекты: система "лайков" для Django на примере PythonDigest.ru
Словоблудие:
Python дайджест - это крупный русскоязычный агрегатор Python новостей с кучей ссылок. Больше 10 тысяч ссылок уже собрали. Но в таком море контента тяжело ориентироваться и постоянно в голове вопрос "Как показать пользователю только релевантную информацию?".
Одному нравится Django, другому ссылки на обработку данных, кому-то релизы! Да и хорошо бы начать создавать конспекты из этих ссылок.
И вот пришло в голову два варианта решения вечного вопроса.
- Метить каждую новость тегами и группировать новости по этим меткам
Способ очень хороший, но нужна автоматика чтобы расставила теги или армию читателей :)
Представьте, надо прочитать каждую новость, разобраться в ней, а затем расставить теги, указать категории. Если учесть, что каждую неделю проходит модерацию более 300 ссылок и надо хотя бы по 2 минуты на такую модерацию, то примерно 10 часов рабочего времени уйдет. А ведь еще есть 10.000 ссылок в архиве, которые тоже надо переработать.
Надо явно какой-то другой подход!
- Узнать у пользователя какие ссылки ему нравятся и предлагать такие же.
Что же, такой подход более реальный для интеграции с Python Дайджест (хотя и над первым работаем). Все-таки инструментов достаточно - Google аналитика, Яндекс метрика и счетчики позволяют смотреть как ведет пользователь себя на сайте, что кликает.
Еще хорошо бы узнать какие ссылки нравятся. Конечно, можно считать "раз кликает, значит нравится", но какая-то система лайков не помешает и дайджесту.
Жаль, что каждого читателя опросить не можем.
+1/-1 еще покажут насколько хре..хорошо работает модератор.
С этой целью было решено прикрутить какую-то систему лайков.
Что от такой системы надо? Да чтобы сохраняла +1/-1, время, может быть какой-то user_id. Но так как на сайте PythonДайджест нет пользователей, то user_id будет какой-то крайне анонимный.
"Все написано до нас"
На просторах github найдены два модуля:
- https://github.com/jamesturk/django-secretballot
- https://github.com/praekelt/django-likes (лучше вот этот Форк )
Первый модуль это простой django app для голосования, а второй это view для отображения голосования.
django-secretballot
предоставляет пару моделей, функций которые буквально в одну строчку превращают вашу обычную модель в волшебную
secretballot.enable_voting_on(<ваша модель>)
Эта функция добавляет в модель набор полей и функций для голосования.
Также модуль предоставляет вьюху для голосования и простой middleware, который на основе HTTP заголовка генерирует user_id
Модуль простой, можно почерпнуть знания о расширении функционала моделии
Так, теперь второй модуль - django-likes
Этот модуль предоставляет набор templatetags для отображения голосования, пару шаблонов. По сути, модуль прокидывает запросы через себя в django-secretballot
и тот сохраняет их в БД.
Модули рабочие, разве что пришлось повозиться с AJAX на стороне django-secretballot
- буквально пару строк поправить.
В итоге, лайки были интегрированы в дайджест. Пару примеров как это выглядит:
Share on Twitter Share on Facebook
Comments