我正在使用django执行Blog应用程序。
无论用户是注册用户还是未注册用户,只要有用户看到特定博客,我都希望跟踪页面浏览量。
还希望根据观看次数显示观看次数最多的博客。
有人可以帮我吗。
谢谢
答案 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)
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类