【发布时间】:2021-02-20 07:40:42
【问题描述】:
我正在开发一个博客网络应用程序,我想监控一篇文章的浏览量。我决定使用帖子详细信息视图来计算。为了防止计数器为特定用户增加,我将只允许登录用户计数,并且用户只能计数一次。
这是我的帖子模型
class Post(models.Model):
title = models.CharField(max_length=150)
content = models.TextField(max_length=3000, null=True, blank=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
viewers = models.TextField(default="", null=True, blank=True)
numViews = models.IntegerField(default=0)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
我基本上使用字段“viewers”来跟踪已统计的用户,并使用“numviews”作为计数器。
我的views.py函数
class PostDetailView(DetailView):
model = Post
def get(self, request, *args, **kwargs):
# increment post views whenever request is made
postObject = self.get_object()
user = request.user
if postObject.viewers == None:
postObject.viewers = ""
postObject.save()
if user.is_authenticated and user.username not in postObject.viewers:
# increment
postObject.numViews += 1
postObject.save()
# add username to viewers list
postObject.viewers+=user.username
postObject.save()
return super().get(request, *args, **kwargs)
在视图函数中,我正在检查用户名是否已附加到查看器字符串中,否则附加它并增加计数器。 有没有更有效的方法来做到这一点?如果博客获得成千上万的浏览量,那将是一串很长的用户名。
【问题讨论】:
-
您通过哪个
variable访问post views?queryset或created?