如何为Django详细信息视图添加页面视图计数?

时间:2018-09-20 12:57:39

标签: django django-models django-templates django-views

我正在使用django执行Blog应用程序。

无论用户是注册用户还是未注册用户,只要有用户看到特定博客,我都希望跟踪页面浏览量。

还希望根据观看次数显示观看次数最多的博客。

有人可以帮我吗。

谢谢

3 个答案:

答案 0 :(得分:3)

models.py

class Blog(models.Model):
    #fields you need
    blog_views=models.IntegerField(default=0)

views.py

def blog_post(request,post_id):
    #your code
    blog_object=Blog.objects.get(id=post_id)
    blog_object.blog_views=blog_object.blog_views+1
    blog_object.save()
    #your code

这将仅计算每个博客的访问量。这还将计算单个用户的多次观看。

答案 1 :(得分:1)

  1. 将IntegerField添加到模型中以存储视图数。
  2. 更改视图,这样,当视图得到请求时,它会通过在前一个计数上增加一个计数来增加计数。

models.py:

blog_view = models.IntegerField(default=0)

views.py:

class BlogView(DetailView):
    model = Blog
    def get_object(self):
        obj = super().get_object()
        obj.blog_view += 1
        obj.save()
        return obj

答案 2 :(得分:1)

我们可以通过在数据库中创建帖子视图表来使用IPAdress来统计视图。

在models.py

from django.contrib.auth.models import User
class PostViews(models.Model):
    IPAddres= models.GenericIPAddressField(default="45.243.82.169")
    post = models.ForeignKey('Post', on_delete=models.CASCADE)

    def __str__(self):
        return '{0} in {1} post'.format(self.IPAddres,self.post.title)

然后,将其设置为Post类的属性。

models.py例如:

class Post(models.Model):
    title = models.CharField(max_length=100, unique= True)
    slug= models.SlugField(blank=True, null=True, unique=True)
    @property
    def views_count(self):
        return PostViews.objects.filter(post=self).count()

然后您可以阅读有关属性here的信息

在views.py

def PostsDetailsView(request,slug):
    post_details=Post.objects.get(slug=slug)
    def get_client_ip(request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip

    PostViews.objects.get_or_create(user=request.user, post=post_details)

因此,此功能可确保如果IPAdress看到此帖子,则如果他第一次看到该帖子,则不会执行任何操作,它将在数据库中创建一个对象并将其计为视图。 您可以阅读有关IPAdress here的更多信息。 不要忘记进行迁移,迁移并在admin.py中注册PostViews类