wagtail cms的轮询插件

wagtailpolls的Python项目详细描述


提供轮询功能的wagtail插件。

安装

使用pip安装:

pip install wagtailpolls

它适用于Wagtail 1.3及以上。

使用

wagtailpolls添加到INSTALLED_APPS中。

确保将from wagtailpolls.views.vote import vote行添加到urls.py中,并包含url url(r'^vote/(?P<poll_pk>.*)/$', vote, name='wagtailpolls_vote')

定义一个引用wagtailpolls.Poll的外键,并使用PollChooserPanel

fromdjango.dbimportmodelsfromwagtailpolls.edit_handlersimportPollChooserPanelfromwagtail.wagtailadmin.edit_handlersimportFieldPanelclassContent(Page):body=models.TextField()poll=models.ForeignKey('wagtailpolls.Poll',null=True,blank=True,on_delete=models.SET_NULL)content_panels=[FieldPanel('body',classname="full"),PollChooserPanel('poll'),]

然后,在编辑器中,确保在wagtail管理的polls部分添加了一些polls。您将能够从模板中选择一个可以访问的投票,正如您所期望的那样。

模板显示

您可以通过多种方式显示投票。wagtailpolls附带了一个模板标记来帮助实现这一点,以及通过模板化来将每个问题呈现为表单的某些属性。下面是使用提供的所有工具的示例:

{% extends "layouts/page.html" %}
{% load wagtailpolls_tags %}
{% block content %}
<h1>{{ self.title }}</h1><br>
{% if self.poll %}
<formclass='poll'method='POST'action='{% vote self.poll %}'>
{% csrf_token %}
{{self.poll.form}}
<br><br><inputtype="submit"value="Vote"></form>
{% else %}
    No polls added to this page yet!
{% endif %}
{% endblock %}

如图所示,{% vote %}template标记需要传递一个poll实例才能正常工作。您还需要在使用此模板标记的文件顶部{% load wagtailpolls_tags %}。 投票可以在最后使用.form呈现所有问题。.form_as_ul和所有其他表单类型也将工作。

如果您确实为页面选择了投票,则表单上将不会显示任何字段,并且在投票时,将显示一条消息,说明没有要投票的投票。

投票

提交投票后,服务器将返回JsonResponse,如:

{"total_votes":11,"total_questions":3,"poll":"Test Poll","votes":{"Nah":10,"Yeah":1,"Maybe":0}}

使用javascript,可以根据自己的喜好使用这些数据创建投票的前端。

投票表也会进行一些验证。如果投票表无法获得您的IP,它将返回如下内容:

{"poll":"Test Poll","total_questions":3,"total_votes":11,"votes":{"Yeah":1,"Maybe":0,"Nah":10},"form_error":{"__all__":["Sorry, we were not able to obtain your ip address"]}}

还有一个WAGTAILPOLLS_VOTE_COOLDOWN是在您的设置中设置的。这将只允许同一IP上的用户在您选择的时间间隔内进行投票。如果捕捉到这个错误,则该错误将出现在JsonResponse中,与上面的错误非常相似。

此外,信息将被添加到django会话中(基本上将设置cookies),这将有助于确保设备不能投票两次。如果由于这个原因投票被拒绝,投票就不会注册,不会在JsonResponse中返回任何错误。

设置

可以在settings.py文件中设置以下设置。

WAGTAILPOLLS_VOTE_COOLDOWN这是一个表示分钟的整数,默认为10分钟。

WAGTAILPOLLS_VOTE_REQUIRE_PERMS代表投票权的字符串或字符串列表。'wagtailadmin.access\u admin'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java以编程方式最小化JInternalFrame?   java使用JsonPath将不均匀列表提取为类型化对象   spring如何将java/resources文件获取到InputStream?   Java逻辑错误并不总是存在   java Firebase,更新特定字段   Java stream groupby并同时加入以进行csv导出   java安卓:如果出现任何声音,监听器将录制声音   java如何从多个文件中轮询最后修改的文件并发送到apache camel中的目标端点?   java是否返回多个比较器?   JavaBean IO:Date MMM在CAPS中不解析   当JButton从另一个类单击时,java正在更新JLabel   基类中子类的Java泛型初始化   jakarta ee Java ee制作一个以毫秒为间隔的计时器来发送数据包   json Windows Azure日期格式转换为Java日期