网站的访问次数是判断一个网站流量的关键数据,首先我们要搞清楚什么是浏览量和访问量,这里我参考了如何正确确定网站的浏览量和访问量
浏览量:网站所有页面被点击的总次数。一个IP点击N次,按N次统计。
l 从技术层面讲,指浏览器加载网页的次数总和。
访问量:从来到网站到离开,算一次统计。你访问一个网站,离开后,再次重新访问,访问量按2次算。
l 关掉浏览器,或直接关掉网站,算离开网站。(一次访问结束)
l 如果一直没有关掉网站,访问网站的不同页面,算一次访问。
l 一天内不同时间访问网站N次,算N次访问。
本次在我的项目中采用的是网站的访问量
首先,我们需要创建一个模型来存储页面的访问统计数据。在models.py文件中添加如下代码:
class Page(models.Model):
url = models.URLField(unique=True)
view_count = models.PositiveIntegerField(default=0)
def increase_view_count(self):
self.view_count += 1
self.save()
上述代码中url是每个页面的URL,而view_count是统计访问页面的次数
在定义模型之后,我们需要为页面请求编写一个中间件,在每次请求结束时对页面的访问次数进行更新。在middlewares.py文件中添加如下代码:
from .models import Page
class PageViewCountMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if response.status_code == 200 and request.method == "GET":
try:
page = Page.objects.get(url=request.path_info)
page.increase_view_count()
except Page.DoesNotExist:
Page.objects.create(url=request.path_info, view_count=1)
return response
上述代码定义了一个名为PageViewCountMiddleware的中间件,它在每次请求结束时判断页面是否存在于数据库中,如果存在则将访问次数加1,如果不存在则创建该页面并将访问次数设置为1。
最后,我们需要将中间件注册到项目的settings.py文件中,在MIDDLEWARE中添加如下代码:
MIDDLEWARE = [
'''
'app01.middlewares.PageViewCountMiddleware',
'''
]
注意:app01是你的app名称
操作完前面的内容整个工作实际上还没有结束,访问量只是在数据库中可以查询,而在前端页面是看不到的,那么怎么实现呢?
起初我是在我的前端页面加入了这么一行代码:
<span class="view-count">
<img src="/static/img/eye_icon.png" alt="眼睛图标" />
{% if page %} 访问量:{{page.view_count}} {% endif %}
</span>
发现数据库的数据并没有显示在前端,只有’访问量‘三个字,那么是什么原因呢?回到最初的想法,我当时就是想当用户登录我的网站就增加访问量,也没有想着每个访问量的页面都显示,那么只用获取数据库中首页的访问次数就可以了。代码如下:
def my_view(request):
# 查询特定URL的Page对象
page = Page.objects.get(url='/index/')
# 获取view_count的值
page.view_count = page.view_count
return render(request,'index.html', { 'page': page})
上述代码中url=’/index/'就是查询首页的URL,再获取它的view_count访问次数,注意return返回的不是{‘page.view_count’},而是{ ‘page’: page}。然后再刷新前端就可以发现调用成功,数据成功显示。希望我的文章对一些小伙伴有帮助!