我希望有一个页面计数器,显示在我的网站上查看过特定页面的访问者数量。是否可以使用Django执行此操作?
答案 0 :(得分:9)
“页面计数器”是什么?一段持久的数据,由视图函数更新并由模板显示。
正如您无疑已经意识到的那样,所有Django都有以下几个部分。
<强>模型强>
如果要将页面计数器保留在数据库中,则需要Django模型。
class PageCounter( Model ):
您需要在此模型中添加一行。通常情况下,“fixture”会帮助实现这一点,因为它只有一行而你只需要在执行syncdb时将它放入一次。
查看功能
然后,您需要在视图函数中获取并更新页面计数器。
pageCounter= PageCounter.objects.all()[0]
pageCounter.count += 1
pageCounter.save()
<强>模板强>
现在您需要为模板提供值,以便显示它。
答案 1 :(得分:9)
有一个名为django-hitcount的问题的Django应用程序。它易于使用,并且可以在任何项目中重复使用。
答案 2 :(得分:1)
我知道这是一个老帖子,但偶尔人们可能会有同样的问题。
如果您想避开第三方库并阻止计数器在每次刷新页面时更新,您可以执行以下Mixin(以S.Lott的答案为基础)
class BlogPostCounterMixin(object):
def get_context_data(self, **kwargs):
context = super(BlogPostCounterMixin, self).get_context_data(**kwargs)
blog_post_slug = self.kwargs['slug']
if not blog_post_slug in self.request.session:
bp = BlogPost.objects.filter(slug=blog_post_slug).update(counter=+1)
# Insert the slug into the session as the user has seen it
self.request.session[blog_post_slug] = blog_post_slug
return context
它检查所访问的模型是否已存储在会话中。如果它已存储在会话中,则会跳过递增,否则它会递增计数器并将模型的slug添加到会话中,从而阻止页面刷新的增量。
注意:这是您需要添加到视图中的Mixin。