Skip to main content
 首页 » 编程设计

python之我如何计算 Django 中页面的访问量 (通过重定向)

2025年05月04日33zdz8207

我已经阅读了其他几个问题,但我要找的东西不在那里。

我想计算用户浏览了 ToPost/to_post.html 部分的次数。

延迟重定向有效,但增加访问次数无效:post.visit_num += 1

我有一个 View ,其模板在一秒钟后重定向:

def ToPost(request, pk): 
    post = Post.objects.get(pk=pk) 
    post.visit_num += 1 
    args = {'post': post} 
    return render(request, 'posts/to_post.html', args) 

pk 在 URL 中:

url(r'^(?P<pk>\d+)/to-post/$', views.ToPost, name='to_post'), 

模板to_post.html:

{% extends 'base.html' %} 
 
{% block head %} 
<meta http-equiv="refresh" content="1;url={% url 'home_space:view_post' pk=post.pk %}"> 
{% endblock %} 
 
{% block body %} 
<div class="container"> 
    <h2> 
        To post {{ post.pk }}... 
    </h2> 
</div> 
{% endblock %} 

Post的模型:

class Post(models.Model): 
    title = models.CharField(max_length=128, verbose_name='Title') 
    body = models.CharField(max_length=500, verbose_name='Description') 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    visit_num = models.PositiveIntegerField(default=0) 
 
    def __str__(self): 
        return self.title 

请您参考如下方法:

您必须在递增后保存 post 实例,并使用 F 对象来避免竞争条件。也不要将函数名称大写,而是使用 snake_case,更多关于 F 对象的信息在这里 https://docs.djangoproject.com/en/2.1/ref/models/expressions/#f-expressions

from django.db.models import F     
 
def to_post(request, pk): 
    post = Post.objects.get(pk=pk) 
    post.visit_num = F('visit_num') + 1 
    post.save() 
    args = {'post': post} 
    return render(request, 'posts/to_post.html', args)