如何计算django网站的访客数量?

问题描述

我正在开发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>

解决方法

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

jsondata = {
    ask: [350.5,346,341,336,331],bid: [346,331,326.5],};

const asks = jsondata["ask"];
const bids = jsondata["bid"];

const table = document.getElementById("apps");

for (let i = 0; i < Math.min(asks.length,bids.length); i++) {
    var tr = document.createElement("tr"); // New row

    // Add the ask:
    var td = document.createElement("td");
    var txt = document.createTextNode(asks[i]);
    td.appendChild(txt);
    tr.appendChild(td);

    // Add the bid:
    td = document.createElement("td");
    txt = document.createTextNode(bids[i]);
    td.appendChild(txt);
    tr.appendChild(td);

    table.appendChild(tr); // Add this row to the table
}
,

您需要具有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已被计数。现在,您可以基于此决定是否更新计数。