在不使用帐户的情况下设计 Django 投票系统

Posted

技术标签:

【中文标题】在不使用帐户的情况下设计 Django 投票系统【英文标题】:Designing a Django voting system without using accounts 【发布时间】:2011-06-29 10:51:23 【问题描述】:

我们正在考虑在不使用任何类型的凭据的情况下实施投票系统(赞成票、反对票)——没有应用程序帐户或 OpenID 或类似的任何东西。

关注点:

    防止机器人投票 允许 NAT 下的个人投票而不会覆盖/无效他人的投票 防止(或至少使用户很难)多次投票

我的问题:

    如果您实现了类似的东西,有什么提示吗? 我可能忽略了任何问题? 我应该研究什么工具?

如果您有任何问题可以帮助您回答这些问题,请在 cmets 中提问!

【问题讨论】:

相关:***.com/questions/1897434/… 确实非常相关。就我而言,糟糕的 SO-search-fu。话虽如此,我还是把这个问题留了下来,看看我是否能得到一些 Django 特定的回复。 【参考方案1】:

解决您的疑虑:

1:一个简单的验证码可能就可以解决问题,如果你用谷歌搜索“django captcha”,有很多插件。我自己从未使用过它们,所以我不能说哪个是最好的。

2 & 3:使用 Django 的会话可以解决这两个问题 - 使用它,您可以在用户的​​浏览器上保存一个 cookie,以表明该人已经投票。这显然允许人们通过不同的浏览器或通过清除缓存来投票,因此这取决于不允许人们投票两次的重要性。不过,我想只有一小部分人会真正考虑尝试清除缓存。据我所知,在没有登录过程的情况下限制用户的唯一其他方法是测试 IP 地址,但这会违反您的第二个标准,因为同一网络上的人将显示为具有相同的 IP 地址。

如果您不想像删除浏览器 cookie 那样简单地进行多次投票,您还可以允许 facebook 或 twitter 登录 - django-socialregistration 插件记录良好且易于实施。

希望有帮助!

【讨论】:

【参考方案2】:

Recaptcha 是一个很好的选择。对于 Django,这是我最成功的一个,它实际上使用从 Recaptcha 加载的图像(而不是动态生成的本地图像):

http://pypi.python.org/pypi/recaptcha-client#downloads

安装说明在这个sn-p中:

http://djangosnippets.org/snippets/433/

如果 Recaptcha 对于您正在做的事情有点笨拙,我听说有人实现了一个表单,该表单加载了一个包含时间戳值的隐藏输入,对应于表单的加载时间。然后,当提交表单时,生成一个新的时间戳并获取两者之间的差异。如果以秒为单位的差异低于对人类访问者来说不合理的某个阈值,那么您很可能有一个机器人。这适用于具有多个字段的联系表单...通常需要一个人超过 10 秒才能填写。

我无法说出这种技术在生产中的实际效果……现在很多垃圾邮件机器人都比我聪明。但您可能会考虑研究或测试它。

【讨论】:

以上是关于在不使用帐户的情况下设计 Django 投票系统的主要内容,如果未能解决你的问题,请参考以下文章

如何在不引发错误的情况下更新数据库中的不喜欢投票?

作业手机投票APP

如何在不使用帐户密钥的情况下访问存储帐户 blob 容器?

如何在不定义内容类型或模型的情况下使用 Django 权限?

在不设置 SRV 记录的情况下连接到 Google 帐户

在不使用主键或辅助键的情况下使用 azure 存储帐户进行身份验证