Django增加站点运行天数统计功能
2020-03-23     loonlog     2804     2
本文目录
最近闲来没事,总想着为我的博客添加些小功能,比如,为站点添加一个网站运行天数的统计信息,以此来鼓励自己,要继续加油呀!
干一件事总想着要用最简单的方法处理,刚开始想到有现成的模版过滤器用,还真就有几个,比如
{{ datetime|timesince }}和{{ datetime|timeuntil }}: 给定日期到现在过去了多少时间,二者的区别就在于日期的前后位置。
但不爽的是,他自己默认的输出格式是“1 年,3 月”或者“5月,10天”,比较不好的是,逗号不爽,语义不太符合中国人习惯,还有就是有空格,虽然可以用cut过滤器去掉逗号,去掉逗号之后会发现,还有空格,好烦呀,再想其他办法吧。
还好,在python中,可以使用datetime模块可以计算两个时间的差,比如:
import datetime d1 = datetime.datetime(2005, 2, 16) d2 = datetime.datetime(2004, 12, 31) print (d1 - d2).days
计算运行时间的例子,以秒进行显示
import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() print (endtime - starttime).seconds
这个方法挺好,决定用这个方法了。
1、把代码添加在自定义模版标签,
在你的模版标签blog_tags.py文件中,新添加一个简单的模版标签,注册,并写相应的代码,如下:
from django.utils import timezone #引入timezone模块 import datetime ... @register.simple_tag def get_run_times(): # 获取站点运行时间 post = Post.objects.order_by('pk').first() #获取站点创建的第一篇文章 set_time = post.created #获取第一篇文章的创建时间 now_time = timezone.now() #获取当前时间 run_times = (now_time - set_time).days #计算两个时间的差 return run_times
代码中省略号为其他无关的代码,只显示实际功能代码,下文处理方式相同。
2、在前端html文件中,包含自定义模版标签,然后使用模版标签显示运行天数
{% load blog_tags %} ... {% get_run_times as tianshu %} {{ tianshu }} ...
以上就完美的显示当前运行的天数了。
优化一下
3、然而,上面的代码中,获取了第一篇文章的创建时间,这个时间也不用非得查询数据库,因为建站时间是已知的,我们只需固定这个时间即可,解决服务器资源,把set_time换成固定时间,代码如下
...
@register.simple_tag def get_run_times(): # 获取运行时间 set_time = datetime.datetime(2019,5,10) #现在使用手动输入一个固定时间,可以减少后台查询数据库 now_time = timezone.now() run_times = (now_time - set_time).days return run_times
改后代码运行网页时候报错,错误信息为:
can't subtract offset-naive and offset-aware datetimes
这是因为两个时间不属于同一类型,offset-naive是不含时区的类型,而offset-aware是有时区类型,两者自然不能比较,两者做时间差是不行的。我们需要将一个offset-aware型转换为offset-naive型,也即是把带时区类型的数据转换为不带时区的类型,即可满足我们使用,管他是哪个时区呢,统计可以精确到天,差几个小时又如何。
代码改为下面的结构
... @register.simple_tag def get_run_times(): # 获取运行时间 set_time = datetime.datetime(2019,5,10) #现在使用手动输入一个固定时间,可以减少后台查询数据库 now_time = timezone.now().replace(tzinfo=None) #这里使用replace(tzinfo=None)是为了把这个时间格式转换为不含时区类型, run_times = (now_time - set_time).days return run_times
重新运行,ok,完美显示。
参考资料:
https://blog.csdn.net/qq_25420115/article/details/53149669
https://blog.csdn.net/xm_csdn/article/details/76228061
欢迎留言评论,相互交流!
http://loonlog.com/2020/3/23/django-site-runs-days-umber/
评论列表,共 2 条评论
回复
vuitr机房好贵啊,感觉。个人就是爬个梯子,弄个小博客什么的。
回复
要说贵吧,目前我也没发现便宜的,放个梯子,在弄点其他的,比如博客,就相当于充分利用他了,物有所值!
用vultr还有个最大的优势就是,备份快照,需要的时候,重新恢复一个服务器,相当于换个ip,他是按照小时收费,删除就不计费,弄一个测试一下也不会花几分钱,比较自由。