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:如何计算查看的人数的主要内容,如果未能解决你的问题,请参考以下文章