0

我正在尝试为不需要登录的匿名用户创建一个基本的上下投票系统,这样任何访问者都可以推送一次并输入投票。显然,我们必须限制人们投一票。在对 djangoatings 模块进行了一些研究之后,我发现evercookie for django 是实现这种能力的最有希望的方法。但是,我需要一些帮助来编写将当前对对象的投票的 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方法,如果它返回某些内容 - 将其放入隐藏字段)或进行数据库/模型级别验证,这可能是一种矫枉过正这个案例。

于 2015-02-08T17:11:46.210 回答