Django:如何计算观看人数

时间:2014-08-07 09:52:16

标签: python django cookies

我在Django中制作了一个简单的BBS应用程序,我想要它,以便每当有人看到帖子时,该帖子上的观看次数(post_view_no)就会增加。

目前,我面临两个困难:

  • 我需要限制post_view_no的增加,以便一个用户只能增加一次,无论用户刷新/点击帖子多少次。

  • 我还需要能够跟踪未登录的用户。

关于第一个问题,只要我创建一个名为' View'并检查数据库,但我觉得这可能是一个过度杀伤。

就第二个问题而言,我能想到的只是使用cookie / IP地址来跟踪用户,但IP并不是唯一的,我无法弄清楚如何使用cookie

我相信这是论坛/ bbs解决方案的一个常见功能,但谷歌搜索只出现了插件或“傻瓜”#39;每次查看帖子时都会增加视图的解决方案。

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

我认为你可以通过cookies做两件事。例如,当用户访问页面时,您可以

  1. 检查他们的会话中是否设置了“Viewed_post_%s”(其中%s是帖子ID)密钥。

  2. 如果他们有,什么都不做。如果他们没有,请将相应view_count对象的Post数字字段加1,并在其会话中设置密钥(cookie)“seen_post_%s”(以便赢得&#39) ; t计算未来)。

  3. 这适用于匿名用户和注册用户,但是通过清除cookie或设置浏览器拒绝它们,用户可以对游戏进行游戏计数。

    现在使用与Django的cookie(会话)非常简单:为当前用户设置一个值,你只需调用类似

    的内容
    request.session['viewed_post_%s' % post.id] = True
    

    在你看来,并完成了。 (查看docs,尤其是examples。)

    免责声明:这不是我的首要任务,我个人也没有这样做,通常是在需要进行一些网页浏览/活动跟踪时(以便你知道什么会增加你网站的流量,当用户更活跃时等等。)那么使用专门的系统(例如,Google Analytics,StatsD)是有意义的。但是对于某些特定的用例,或者作为练习,这应该可行。

答案 1 :(得分:0)

只是提供一个二级解决方案,我认为它可以工作,但也很容易游戏(如果通过代理或不同的设备)。我还没试过这个,但我认为它应该有用,并且不需要考虑cookie,而且你会聚合一些额外的数据,这是noice。

我会创建一个名为TrackedPosts的模型。

class TrackedPosts(models.Model):
    post = models.ForeignKey(Post)
    ip = models.CharField(max_length=16) #only accounting for ipv4
    user = models.ForeignKey(User) #if you want to track logged in or anonymous

然后当你查看帖子时,你会接受请求ip。

def my_post_view(request, post_id):
    #you could check for logged in users as well.
    tracked_post, created = TrackedPost.objects.get_or_create(post__pk=id, ip=request.ip, user=request.user) #note, not actual api
    if created:
        tracked_post.post.count += 1
        tracked_post.post.save()
    return render_to_response('')