项目上线后,作为站长肯定迫不及待的想知道页面访问量多少,哪些页面更受用户喜爱,访问用户终端类型占比多少?用户在哪个时间段访问较多?对于这些流量的分析,主流的解决方案主要有①分析nginx的access.log日志②使用第三方统计平台(如百度统计、友盟)
一、注册开通百度统计功能
-
打开链接,点击右上角注册,选择百度统计-站长版

-
填写表单,完成注册

-
登录账号后,点击管理——网站列表——新增网站,填写网站详细信息

二、html页面添加统计代码
-
在管理——代码管理——代码获取页,点击获取统计代码

-
在项目的base页面,添加粘贴相关代码

-
然后点击代码安装检查,验证是否正确安装

- 如果已安装代码,但百度统计提示代码未安装,检查页面的referrer策略,设置为no-referrer-when-downgrade
三、项目后台添加相关代码
1. 在setting.py文件中定义变量,便于后期更换token等信息
# 百度统计token
BAIDU_USERNAME = '*****'
BAIDU_PASSWORD = '*****'
BAIDU_ID = '*****'
BAIDU_TOKEN = '*****'
BAIDU_ID可以查看地址栏siteId的值

2. 新建baidu_tongji.py文件,专门处理百度统计相关业务逻辑
import json
import requests
from django.utils import timezone
from myblog.settings import BAIDU_USERNAME, BAIDU_PASSWORD, BAIDU_TOKEN, BAIDU_ID, BAIDU_START_DATE
# 百度统计api
class BaiduApi:
def __init__(self):
self.url = 'https://api.baidu.com/json/tongji/v1/ReportService/getData'
self.username = BAIDU_USERNAME
self.password = BAIDU_PASSWORD
self.token = BAIDU_TOKEN
self.id = BAIDU_ID
def countAll(self):
now_date = timezone.now()
end_date = now_date.strftime('%Y%m%d')
data = {
"header": {
"username": self.username,
"password": self.password,
"token": self.token,
"account_type": 1
},
"body": {
"site_id": self.id,
"start_date": BAIDU_START_DATE,
"end_date": end_date,
"metrics": "pv_count,visitor_count,ip_count",
"method": "trend/time/a",
"area": ""
}
}
r = requests.post(self.url, data=json.dumps(data))
result = json.loads(r.text)
pv = result["body"]["data"][0]["result"]["pageSum"][0][0]
uv = result["body"]["data"][0]["result"]["pageSum"][0][1]
ip = result["body"]["data"][0]["result"]["pageSum"][0][2]
count_dict = {}
count_dict['pv'] = pv
count_dict['uv'] = uv
count_dict['ip'] = ip
return count_dict
- 这里只列出了pv、uv、ip统计代码,其他信息可以参考开发者手册
3. views视图函数编写调用部分的逻辑代码
# 运行时间
now_data = str(timezone.now().strftime('%Y-%m-%d'))
d1 = datetime.datetime.strptime(BAIDU_START_DATE, '%Y%m%d')
d2 = datetime.datetime.strptime(now_data, '%Y-%m-%d')
day_count = (d2 - d1).days
# 流量统计
api = BaiduApi()
count = api.countAll()
all_pv = count['pv']
all_uv = count['uv']
all_ip = count['ip']
4. html文件加载数据
<div class="about-me">
<div>
<i class="fas fa-business-time"></i>
<span>运行时间:{{ aside_dict.day_count }}天</span>
</div>
<div>
<i class="fas fa-book-reader"></i>
<span>总访问量:{{ aside_dict.all_pv }}</span>
</div>
<div>
<i class="fas fa-user-plus"></i>
<span>访问人数:{{ aside_dict.all_uv }}</span>
</div>
<div>
<i class="fas fa-chalkboard-teacher"></i>
<span>访问IP:{{ aside_dict.all_ip }}</span>
</div>
</div>
四、最终效果展示
1. 侧边栏统计pv、uv

2. 网站后台流量统计
