Django匿名投票应用程序

django-secretballot的Python项目详细描述


=======
django secretballot
======


图片::https://travis-ci.org/jamesturk/django-secretballot.svg?branch=master
:目标:https://travis ci.org/jamesturk/django secretballot

…图片::https://img.shields.io/pypi/v/django secretballot.svg
:目标:https://pypi.python.org/pypi/django secretballot




n以及相关的实用程序,包括通用视图,以方便在django项目中添加"匿名"投票。


t;=2.7
django>;=1.8


usage
=


----


*将"secretballot"添加到已安装的应用程序
*将secretballot中间件添加到中间件类(有关详细信息,请参见中间件部分)

-
*run`./manage.py migrate``

启用对模型的投票功能
/>类story appconfig(appconfig):

def ready(self):
story_model=apps.get_model("story_app","story")
secretballot.enable_voting_on(story_model)


"启用投票"在所有实例上都有许多特殊字段:

对``启用`投票`)
总的``赞成票:
总的`+1票
(可以通过将``upvots`名称``参数传递给``启用``投票``来重命名)
总的``反对票:
总的`-1票
(可以通过将``downvots`名称``参数传递给``启用`来重命名ing_on`)
vote_total:
(total_upvots-total_downvots)
(可以通过将"total_name"参数传递给"enable_voting"来重命名)
u secretballot enabled
布尔值表示secretballot已启用(可以使用hasatt进行测试)
(ca不可重命名,用于可靠检查secretballot是否可用,即使所有
其他字段都已重命名)


通过将"add\u vote\u name"参数传递到"enable\u voting"on``)
remove\u vote:
函数,该函数接受一个令牌并移除该令牌的投票(如果存在)
(可以通过将"remove\u vote\u name"参数传递到"enable\u voting"on`)来重命名

manager
~添加了特殊的管理器,允许包含"total\u upvots"和"total\u downvots"以及一些额外的功能。

r/>在votable管理器上还有一个附加方法:

from_request(self,request):
当对votable对象的queryset调用时,将添加一个"user_vote"属性,该属性是当前"user"的投票(实际上是分配给请求的令牌)

例如:

def story_view(request,slug):
story=story.objects.from_request(request.get(pk=slug)
story有以下额外属性iButes
用户投票:1、0或+1
总投票数:总投票数+1
总投票数:总投票数-1
总投票数:总投票数r/>
tokens和secretballotmiddleware
--------


如果没有用户登录,则无法确定用户不会投票不止一次,但有多种方法可以限制滥用。secretballot对这个问题采取了一种相当轻松的方法,vote对象有一个"token"字段,用于存储从请求生成的唯一标识令牌。要限制来自特定IP地址的投票数,将令牌设置为IP地址就足够了,但也可以开发更复杂的启发式来限制投票。

secretballot使用一个简单的中间件来完成此任务,并使用户能够定义他们自己的中间件,该中间件将使用他们想要的任何启发式方法。

secretballotmiddleware是一个抽象类,它定义一个生成令牌(请求)方法,该方法应返回一个用于令牌的字符串。

为了方便起见,已经定义了几个中间件:

只需将令牌设置为请求。meta['remote_addr']--用户的IP地址
secretballotippuseragentmiddleware:
将令牌设置为用户的IP地址和用户的哈希值代理——如果您希望定义自己的中间件,只需从secretballotmiddleware派生一个类并实现generate_token方法,那么希望比单独的ip稍微独特一些。如果你提出了一些对其他人有用的东西,我们随时欢迎你的贡献。

generic views
----

``secretballot.views``包括以下generic views::


vote(请求、内容类型、对象id、投票,
redirect url=none、template_name=none,template_loader=loader,
extra_context=none,context_processors=none,mimetype=none)

此视图使用主键"object_id``创建或更改对"content_type`"对象的投票。
如果已存在投票,则将替换该投票(除非投票为0 i在这种情况下,它将被删除)。

如果指定了redirect_url,则无论
如果指定了template_name,则将使用它(连同template_loader、context_processors等)
。如果不使用重定向url或模板名,则将返回文本/json响应

content类型:
正在进行投票的类(votablemodel派生模型)
可以是"django.contrib.contenttypes.models.content type"的实例,
模型类本身,或"app".modelname"string.
对象ID:
要投票的对象的主键
投票:
此投票的值(+1、0或-1)(0删除投票)
可以投票的测试:
(可选)允许限制用户是否可以投票的函数(请参见``可以投票的测试``)
重定向的URL:
(选项Al)要重定向到的URL(如果存在)将重定向,而不是返回普通的HttpResponse
模板名:
(可选)要呈现到的模板,接收包含"content\u obj"的上下文,该上下文是投票对象
模板加载程序:
(可选)要使用的模板加载程序,defaults to``django.template.loader`
额外上下文:
(可选)包含任何额外上下文的字典,将在呈现时调用可调用函数
上下文处理器:
(可选)此视图的上下文处理器列表
mimetype:
(可选)mimetype override

~~~~~~~~~~~~~~~

can-u-vote是一个可选的视图参数,可以在urlconf中指定,urlconf是在为用户记录投票之前调用的。:
返回vote.objects.filter(content_type=content_type,token=request.secretballot_token).count()<;3

所有can_vote_测试方法都必须将非可选参数设置为"secretballot.views.vote",如果应允许投票,则应返回true。如果默认情况下不允许投票,则视图将返回403,但也可以提出不同的异常。






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

推荐PyPI第三方库


热门话题
java使用spring并在CXF中生成服务器和客户端   重载是否可以重载抽象Java类中的抽象方法,但只实现子类中的一个重载方法?   javawhy系统。currentTimeMillis()是否生成不正确的长值?   java使用Apache POI API将xlsx转换为csv   资源Java找不到文件?   java APDU命令验证返回6a88   JAVAlang.ExceptionInInitializerError是在交换机中构造对象时创建的   java使用嵌套while循环打印星形金字塔   sql Java ResultSet获取返回的字段名   java无法将字符串更改为整数,因为负号跟在数字后面   为什么番石榴/爪哇使用“可能”。isPresent()与可选项相反。是否显示(可能)?   JavaJUnit4看不到bean   JavaJBoss以错误的顺序启动servlet   java无法下载Maven依赖项AnypointStudio   安卓如何在java中存储持久数据   java SQL Server JDBC的驱动程序类名是什么   java中针对大输入的性能优化BufferedReader   java eclipse自动完成内容助理