django--博客项目--统计当天的阅读量。
上一篇博客讲的是ContentType,比如我们新建了一个model,然后再里面添加外键,也就是这个ContentType,这样我们就可以将自己的这个model绑定到别的model上。非常的方便。
那么今天这篇博客也会继续利用到这个ContentType。直接看代码
这个model是用来统计当天的阅读数的,其余的也不多说,因为上一篇博客讲过了。
这次主要讲这个
我们看到函数名,这个函数是用来获取最近七天的每天的阅读数,让我们一句一句分析这个函数里面的东西。
timezone.now().date()是获取当天日期,我们可以在shell模式下试试看,先导入from django.utils import timezone
可以看到这里输出了我们当天的日期。
在看datetime.timedelta(days=i)这个是什么,参数是一个整形数值,表示两个时间点之间的间隔,如果days=1就表明两个时间点的间隔为1天,以此类推,我们就可以通过一个for循环得到连续的七天。
所以date = today - datetime.timedelta(days=i),这个date就是当前日期减去i天,我们在shell模式验证后得到以下结果
这里显示的日期是25号,而我们写这篇博客的日期是26号。
date.strftime('%m/%d')就是设置日期的格式,变成07/25这样的格式。
下面就是通过contenttype关联到blog后获取当天的总阅读数,我们看到第二个参数是date,所以我们可以将所有当天的记录全部筛选出来。
接下来就是aggregate这个函数,它是一个类似于数据库里面的聚合函数。
还要再导入一个from django.db.models import Sum,下面这个图没有,看下下个图。
我们发现这里返回的是一个字典,而且对应的值是18,然后我们进入后台看一下
这里面所有的read_num加起来刚好是18。
最后一句,
这里是将这个返回的字典的值加入这个read_nums列表当中,需要注意的是,如果没有值的话就返回0,表示当天阅读量为0,所以要在后面加上or 0.
最后将dates,read_nums这两个列表返回。
(这些博客我都是写给自己看的,当做随笔,所以如果有看到这里但是不知道讲什么的我只能说声抱歉。)
回到views.py里,看到
函数里面的第二行,接收到了返回的两个列表,然后添加到context这个字典里面,最后渲染到首页上。
接收到的数据是通过数据可视化显示,最后的结果长这样。