Сегодня 30 ноября, суббота ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7276
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Web.Запой
Web.Запой
Голосов: 0
Адрес блога: http://webzapoi.blogspot.com/
Добавлен: 2012-05-14 10:10:32
 

Django опрос на свой сайт, django-poll-system

2011-11-11 18:22:00 (читать в оригинале)

Давно не писал в блог, а тут такое событие. Решил внести свой вклад в развитие OpenSource сообщества.

Предыстория

Не так давно понадобился опрос на сайт. Обычный опрос с одиночным и мульти-выбором + пункт с пользовательским вводом. Симпатичный вид, анимация и возможность голосования без редиректа на другую страницу, так же было не последним требованием к "моему опросу".

Все что нашел в сети было либо малофункционально, либо из коробки выглядело как то не презентабельно, на мой субъективный взгляд. Короче говоря решил сделать свой собственный application. Даже на данном этапе, грубо говоря в версии django-poll-system 0.1 :) моя система опросов, вполне себе конкурентно способна и выглядит достаточно не плохо. А требует для этого только Django 1.3 и JQuery. Вот небольшой скриншот:


Пример можно посмотреть на сайте: http://polltest.pythonism.ru 
Прошу обратить внимание что КГБ время от времени лидирует в данном опросе :)

Вся система django-poll-system (так я назвал application) состоит из нескольких моделей, и как мне кажется, клиентская часть получилась даже гораздо более жирной чем серверная и все из-за того что сервер практически ничего не делает, кроме как принимает ответы на опросы и хранит их в базе, все же остальное делается у клиента, вот так то.

Кстати о коде, сразу скажу что мне не нравится моя реализация отправки "пользовательского опроса" по GET, я сделал ее на скорую руку, т.к. при использовании метода отправки POST надо было бы писать дополнительные функции для корректного прохождения Django защиты, а это как многие знают, кто работал с формами, пресловутый CSRF protection. Это конечно же не большая проблема и я исправлю этот недочет в самое ближайшее время. Кстати в одном из конкурирующих, если можно так сказать систем опросов (сторонних проектов) я видел, как автор попросил своих пользователей отключать Django CSRF Middleware, для того чтобы опрос мог отсылать на сервер ответы минуя CSRF protection, что очень сильно снижало защиту сайта от взломов. Ха-ха. Чтобы ради какого то "дурацкого" опроса была такая огромная дыра в безопасности, НУ УЖ НЕТ УВОЛЬТЕ.


Так вот. Система состоит из следующих классов:
  1. PollType - здесь хранятся типы опросов. Естественно предусмотренно дальнейшее расширение типов и функциональности в целом и через создание новыех типов.
  2. Poll - это непосредственно сам опрос, из важных для описания параметров для нас важен "startdate". Этот параметр должен быть уникальным и сделано это специально для корректного движения очередей (Queue см. ниже) ведь активный опрос в очереди может быть только один.
  3. Item - этот класс описывает один пункт опроса. Собственно опрос и состоит из "вопроса" на который просят ответить посетителя и непосредственно из пунктов ответов (Item), мужду которыми пользователь должен сделать выбир.
  4. Queue - несмотря на то, что я не хотел заморачиваться с очередями в 0.1 версии своего приложения, я посчитал, что без этой функциональности мой опрос не нужен ни мне, ни кому-либо другому. Очередь (Queue) - это логическая единица определяющая целую линию опросов. Это позволяет администратору сформировывать структурированную очередь из опросов и настроив Queue лишь однажды, очередь будет автоматически сменять один опрос на другой. Очередь может быть как для анонимных посетителей, так и только для зарегистрированных пользователей.
  5. Choice - данный класс представляет из себя одну сущность выбранного пользователем Item.
  6. Vote - один экземпляр содержит одну единицу голосования (один голос). Который состоит и информации о пользователе (ip, и user пользователь вошел), а так же время и выбранные пользователем пункты (Choice).
Вот собственно и все. Я думаю что этой информации будет достаточно для понимания основной функциональности django-poll-system. И конечно же, по мере того как проект будет развиваться, а он будет уж я то позабочусь :) он будет "обрастать" все новыми и новыми возможностями. Для этого просто необходимы отзывы со стороны. Так что если будут замечания, всегда пожалуйста.

Вот пример использования: http://polltest.pythonism.ru
Вот ссылка на скачивание с ведра: https://bitbucket.org/RafRaf/django-poll-system
Вот на PyPi: http://pypi.python.org/pypi-poll-system/django-poll-system

Можно установить прямо через pip/easy_install, примеры:

>> pip install django-poll-system
>> easy_install django-poll-system

Тэги: django, poll

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»
Изменения рейтинга
Категория «Журналисты»
Взлеты Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.