0

サインインする必要のない匿名ユーザー向けの基本的な上下投票システムを作成しようとしています。これにより、訪問者は一度押すだけで投​​票が入力されます。明らかに、人々を 1 票に制限する必要があります。いくつかの調査と djangoratings モジュールの不運の後、 django のevercookieがこの機能への最も有望なアプローチであることがわかりました。ただし、オブジェクトに現在キャストされている投票の evercookies と、考えられる受信コードを比較するコードの一部を記述するには、少し助けが必要です。他にもたくさんのことがわかったと思います。

私の基本的な django モデル オブジェクトの中核は、次のようなものを追跡するための IntegerField を使用して送信された URL です。

 class newlink(models.Model):

    linktag = models.ForeignKey(‘pagename’) #the page the link belongs in
    linkcomment = models.CharField(max_length=128) #comment to go along with post
    postlinkdate = models.DateTimeField(auto_now_add=True) #submission datestamp
    url = models.URLField(max_length = 1024) 
    linklikescounter = models.IntegerField(null=False, default=0) #this is what will be changed up or down per vote
    # Do I need another field(s) in this model to store evercookie data? Or maybe a new "likevote" class that has a ForeignKey relationship to the newlink class? 


def __unicode__(self):
    return self.url

テンプレートにこのシンプルなボタン/フォームがあります:

<form action="/{{pagename_param}}" method="post">
     {% csrf_token %}
     <input type="hidden" name="linkset_likeid" value="{{ linkset.id }}">
     <input type="submit" class="btn" value="like" name="linklikebtn"/>
     </form>

そして、これを実現するための私の見解:

if (request.POST.get('linklikebtn')):
        linkid = request.POST[‘linkset_likeid’] #retrieve the ID from the form
        url = newlink.objects.get(id=commentid) #get an instance of the desired url
        url.linklikescounter += 1 #increase the IntegerField by 1
        url.save() #save to the db
4

1 に答える 1

0

質問がまだ有効な場合は、Django-Evercookieを見たいと思うかもしれません

あなたの質問に基づいて、リクエストの処理中に繰り返し投票を拒否することができます(たとえば、フォームの検証 - evercookie の get メソッドを呼び出し、それが何かを返す場合 - 非表示のフィールドに入れる)、または DB / モデルレベルの検証を行うことができます。この場合。

于 2015-02-08T17:11:46.210 に答える