当有人发送多个GET请求时如何不增加视图计数



我正在统计博客文章的浏览量

这里是我的models.py

class Blog(models.Model):
author=models.ForeignKey(User,on_delete=models.CASCADE,related_name='post_author')
blog_title=models.CharField(max_length=264,verbose_name='Put a Title')
category=models.ForeignKey(Category,on_delete=models.CASCADE,related_name='category',default=None)
slug= models.SlugField(max_length=264,unique=True,null=True,allow_unicode=True)
blog_content=models.TextField(verbose_name='what is on your mind?')
blog_image=models.ImageField(upload_to='blog_images',verbose_name='Image')
publish_date=models.DateTimeField(auto_now_add=True)
update_date=models.DateTimeField(auto_now=True)
view_count=models.IntegerField(null=True,default=0,blank=True)
class Meta:
ordering = ('-publish_date',)

这是我如何为每个GET请求增加文章的视图数

def blog_details(request, slug):
blog = Blog.objects.get(slug=slug)
if request.method == 'GET':
blog.view_count =blog.view_count+1    
blog.save()
*skipping giving the whole(irrelevant to the question) code of the function*

现在我如何为用户(注册或匿名)的第一个GET请求增加一个帖子的视图数1。如果他们发送更多的get请求,视图计数将不会增加。原谅错误,提前谢谢你

这正是会话变量设计的那种用例。它们将存储一段时间的访问信息

if request.method == 'GET':
#we use .get so it returns None rather than a key error if not set
visited = request.session.get('visited')
if not visited:
blog.view_count =blog.view_count+1    
blog.save()
#we've updated the count so we make sure the code doesn't run next time.
request.session['visited'] = True

会话变量文档-您可能会发现浏览器长度会话与持久会话部分与您的兴趣相关

最新更新