1

我正在用 python 在谷歌应用引擎上编写一个网络应用程序。我使用 jinja2 作为模板引擎。

我目前已经设置好了,这样用户就可以对帖子投赞成票和反对票,但现在他们可以随意投票多次。我只是将投票记录保存在数据库中,然后立即计算。如何有效地防止用户投多票?

4

2 回答 2

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()事务中的方法中,尤其是当您将对用户或被投票的项目执行其他操作时。

希望这可以帮助。

于 2012-07-19T17:22:24.497 回答
1

将投票用户与投票一起存储,并使用您的数据库检查当前用户的现有投票。

您可以在提供页面之前执行检查(因此禁用您的投票按钮),或者在您获得投票尝试时(并显示某种消息)。如果投票对您来说真的很重要,您可能应该编写代码来处理这两种情况。

于 2012-07-19T16:57:33.320 回答