Django:如何计算查看的人数

Posted

技术标签:

【中文标题】Django:如何计算查看的人数【英文标题】:Django : How to count number of people viewed 【发布时间】:2014-08-07 09:52:15 【问题描述】:

我正在 Django 中制作一个简单的 BBS 应用程序,我希望它能够在有人看到帖子时增加该帖子的查看次数 (post_view_no)。

目前,我面临两个困难:

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

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

关于第一个问题,只要我创建一个名为“View”的模型并检查数据库,这似乎很容易,但我觉得这可能有点矫枉过正。

关于第二个问题,我能想到的只是使用 cookie / IP 地址来跟踪用户,但 IP 几乎不是唯一的,我不知道如何使用 cookie

我相信这是论坛/bbs 解决方案的常见功能,但谷歌搜索只出现了插件或“愚蠢”解决方案,每次查看帖子时都会增加浏览量。

最好的方法是什么?

【问题讨论】:

你在使用 django 会话吗?它将处理 cookie 并识别用户是否匿名。 恕我直言,这个问题太宽泛了,因为您正在实现自己的 BBS 应用程序 @Amarghosh 我不确定我是否是,但我确实实现了默认的 django 用户应用程序。因此,如果我使用会话,我将能够检查该用户(已登录/匿名用户)之前是否看过这篇文章?如果是这样,我会在哪里存储此类信息? 【参考方案1】:

我认为您可以通过 cookie 来做这两件事。例如,当用户访问一个页面时,您可以

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

    如果他们有,什么也不做。如果他们不这样做,请将相应Post 对象的view_count 数字字段增加一,并在他们的会话中设置键(cookie)“viewed_post_%s”(这样以后就不会计数了)。

这对匿名用户和注册用户都有效,但是通过清除 cookie 或设置浏览器拒绝它们,用户可以游戏观看次数。

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

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

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

免责声明:这不是我的想法,我没有亲自做过,通常是在需要进行一些页面浏览/活动跟踪时(以便您了解是什么推动了更多访问您的网站的流量,当用户更活跃等),那么使用专门的系统(例如,谷歌分析,StatsD)是有意义的。但是对于某些特定的用例或作为练习,这应该可以工作。

【讨论】:

感谢您的详细解释 :) 我会调查一下!【参考方案2】:

只是为了提供一个辅助解决方案,我认为这可行,但也容易玩游戏(如果通过代理或其他设备来)。我也没有尝试过,但我认为它应该可以工作,并且不需要考虑 cookie,而且您还汇总了一些额外的数据,这些数据是无用的。

我会制作一个名为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('')

【讨论】:

如何使用它在该博客页面中显示博客文章视图?我真的不明白。我想获取页面查看次数,但我的网站不包含登录用户,与 this answer 相比有何不同?

以上是关于Django:如何计算查看的人数的主要内容,如果未能解决你的问题,请参考以下文章

excel中如何计算每个月员工在职人数

如何根据入院和出院日期计算入住人数

如何根据一些已知因素计算人气

如何使用Django ORM查询计算数量乘以价格

如何计算使用 Cloud Firebase 在 Swift UI 中选择一个选项的人数?

如何计算项目的难度与区分度