1

Pythonを使用してGoogleアプリエンジンでWebアプリを作成しています。テンプレートエンジンとしてjinja2を使用しています。

現在、ユーザーが投稿に賛成票と反対票を投じることができるように設定していますが、今のところ、好きなだけ投票できます。私は単純に投票記録をデータベースに保存し、その後すぐに計算します。ユーザーが複数の投票を行うのを効率的に防ぐにはどうすればよいですか?

4

2 に答える 2

2

toggleVote投票を切り替えたいアイテムのキーと、投票を行うユーザーのキーを受け入れるメソッドを作成することをお勧めします。

基本的に 2 つのフィールドを含む、投票を記録するテーブルを追加することもお勧めします。

"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この設定では、ユーザーが 1 つのアイテムに投票した回数 ( )、またはシステム全体でユーザーが投票した回数( )もすぐにわかりますcount where userKey = value...

toggleVote()最後に、最高の信頼性を得るために、特に投票対象のユーザーまたはアイテムに対して他のことを行う場合は、メソッドの更新をトランザクションにラップできます。

お役に立てれば。

于 2012-07-19T17:22:24.497 に答える
1

投票ユーザーを投票とともに保存し、データベースを使用して、現在のユーザーによる既存の投票を確認します。

ページを提供する前に(したがって投票ボタンを無効にする)、または投票を試みたときに(そして何らかのメッセージを表示して)チェックを実行できます。投票が本当に重要な場合は、両方のシナリオを処理するコードを作成する必要があります。

于 2012-07-19T16:57:33.320 に答える