我正在用python在谷歌应用程序引擎上编写一个web应用程序。我使用jinja2作为模板引擎。
我目前已经将其设置为用户可以对帖子进行上投票和下投票,但现在他们可以对帖子进行任意次数的投票。我只需在数据库中有投票记录,然后立即计算它。如何有效地防止用户投多张票?
发布于 2012-07-19 16:57:33
将投票用户与投票一起存储,并使用数据库由当前用户检查现有的投票。
您可以在提供页面之前执行检查(因此禁用投票按钮),也可以在收到投票尝试时执行检查(并显示某种消息)。如果投票对你来说真的很重要,你可能应该编写代码来处理这两种情况。
发布于 2012-07-19 17:22:24
我建议创建一个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()
方法中,特别是当您要对正在投票的用户或项目执行其他操作时。
希望这能有所帮助。
https://stackoverflow.com/questions/11565662
复制相似问题