我正在使用python在谷歌应用引擎上编写一个网络应用。我使用jinja2作为模板引擎。
我目前已将其设置为用户可以对帖子进行投票,但现在他们可以根据需要多次投票。我只是在数据库中有投票记录,然后在此之后立即计算。如何有效阻止用户投票?
答案 0 :(得分:2)
我建议制作一个toggleVote
方法,该方法接受您想要切换投票的项目的键,以及进行投票的用户的密钥。
我还建议添加一个表来记录投票,基本上包含两个字段:
"keyOfUserVoting", "keyOfItemBeingVotedOn"
通过这种方式,您可以简单地进行密钥匹配的非常查询,如果项目存在,则您知道用户对该项目进行了投票。 (Query where keyOfUserVoting = 'param1' and keyOfItemVoted='param2'
,if result != None
,则表示用户已投票)
对于toggleVote()方法,情况可能非常简单:
toggleVote(keyOfUserVoting, keyOfItemToVoteOn):
if (queryResultExists):
// delete this record from the 'votes' table
else:
// add record to the 'votes' table
通过这种方式,您可以永远不必担心用户根据用户投票的次数进行跟踪。
同样,如果您想了解某个项目的投票数量,您可以快速执行另一个查询count where keyOfItemToVoteOn = paramKeyOfItem
。再次,使用GAE,这将非常快。
在此设置中,您还可以快速判断用户对一个项目(count where userKey = value and where itemKey = value
)投票的次数,或用户在整个系统中投票的次数(count where userKey = value
)。 ..
最后,为了获得最佳可靠性,您可以在事务中将更新包装在toggleVote()
方法中,特别是如果您要对正在投票的用户或项目执行其他操作。
希望这有帮助。
答案 1 :(得分:1)
通过投票存储投票用户,并检查当前用户的现有投票,使用您的数据库。
您可以在服务页面之前执行检查(因此禁用投票按钮),或者在您进行投票尝试时(并显示某种消息)。如果投票对你很重要,你应该编写代码来处理这两种情况。