【问题标题】:How to count number of visiorts to django website?如何计算 django 网站的访问量?
【发布时间】:2020-08-20 12:38:44
【问题描述】:

我正在开发 Django Web 应用程序,我需要计算我的页面的访问者数量这是我的代码,它将每次访问主页视为新访问,尽管有会话。

models.py

from django.db import models
class PageView(models.Model):
    hits=models.IntegerField(default=0)

views.py

from django.shortcuts import render
from django.views.generic.base import TemplateView
from datetime import datetime
from .models import PageView

def index(request):
    if (PageView.objects.count() <= 0):
        x = PageView.objects.create()
        x.save()
    else:
        x = PageView.objects.all()[0]
        x.hits = x.hits + 1
        x.save()
        context = {'page': x.hits}
    return render(request, 'pages/index.html', context=context)

HTML

 <h4 >You are {{page}}th visitor</h4>

【问题讨论】:

    标签: python python-3.x django session


    【解决方案1】:

    您需要有 page_name 以及它在 PageView 模型中的计数,如下所示:

    from django.db import models
    class PageView(models.Model):
        page = models.CharField(max_length=50, blank=False)
        hits = models.IntegerField(default=0)
    

    现在,在views.py 中,您需要先获取当前计数器值,然后对其进行更新。

    views.py根据 OP 对答案的评论进行编辑:

    from django.shortcuts import render
    from django.views.generic.base import TemplateView
    from datetime import datetime
    from .models import PageView
    
    def index(request):
        current_page_count = PageView.objects.filter(page=page_name).hits
        context = {'page': current_page_count}
    
        if not request.session.get('counted'):
            page_view = PageView()
            page_view.hit = current_page_count + 1
            page_view.save()
            context = {'page': page_view.hit}
            request.session['counted'] = True
    
        return render(request, 'pages/index.html', context=context)
    

    计算完毕后,您需要更新会话以表明 page_view 已计入此会话。现在,您可以根据此决定是否更新计数。

    【讨论】:

    • 我想将每次访问页面计为一次点击(意味着如果我在另一个选项卡或浏览器中打开页面,则一次会话计为一次,不管我访问哪个页面,一次会话=一次点击)。
    • @DhananjayaDR 更新了答案
    【解决方案2】:

    您没有在代码中的任何位置检查会话。一个简单的实现可能是:

    def index(request):
        if not request.session.get("already_counted"):
            # ...update the counter...
            request.session["already_counted"] = True
        ...
        return render(request, 'pages/index.html', context=context)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      相关资源
      最近更新 更多