Как не увеличивать количество просмотров, когда кто-то отправляет более одного 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
Документы по переменным сессий - возможно, раздел "Сессии длиной до браузера против постоянных сессий" будет соответствовать вашим интересам