搭建自己的博客(十七):添加每日阅读量并使用highcharts通过图表显示
之前写了单篇博客的阅读量统计,今天添加了博客总阅读量统计,并且使用highcharts图表显示。
1、变化的部分
aaarticlea/png;base64,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" alt="" />
2、上代码:
# -*- coding: utf-8 -*-
# @Time : 18-11-7 下午4:12
# @Author : Felix Wang from django.shortcuts import render_to_response
from django.contrib.contenttypes.models import ContentType
from read_statistics.utils import get_seven_days_read_data
from blog.models import Blog def home(requests):
blog_content_type = ContentType.objects.get_for_model(Blog)
dates, read_nums = get_seven_days_read_data(blog_content_type) context = {
'read_nums': read_nums,
'dates': dates,
} return render_to_response('home.html', context)
views.py
from django.contrib import admin
from .models import ReadNum, ReadDetail # Register your models here. @admin.register(ReadNum)
class ReadNumAdmin(admin.ModelAdmin):
list_display = ('read_num', 'content_object') @admin.register(ReadDetail)
class ReadNumAdmin(admin.ModelAdmin):
list_display = ('date', 'read_num', 'content_object')
admin.py
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db.models.fields import exceptions
from django.utils import timezone # Create your models here. # 使用到了contenttype 参考网址:https://docs.djangoproject.com/en/2.1/ref/contrib/contenttypes/
class ReadNum(models.Model):
read_num = models.IntegerField(default=0) # 阅读量
content_type = models.ForeignKey(ContentType, on_delete=models.DO_NOTHING)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id') def __str__(self):
return str(self.read_num) # 阅读计数扩展方法
class ReadNumExpandMethod:
def get_read_num(self): # 获取一对一关联的阅读数
try:
ct = ContentType.objects.get_for_model(self)
readnum = ReadNum.objects.get(content_type=ct, object_id=self.pk)
return readnum.read_num
except exceptions.ObjectDoesNotExist as e:
return 0 class ReadDetail(models.Model):
date = models.DateField(default=timezone.now)
read_num = models.IntegerField(default=0) # 阅读量
content_type = models.ForeignKey(ContentType, on_delete=models.DO_NOTHING)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
models.py
# -*- coding: utf-8 -*-
# @Time : 18-11-17 下午10:03
# @Author : Felix Wang
import datetime
from django.contrib.contenttypes.models import ContentType
from django.db.models import Sum
from django.utils import timezone
from .models import ReadNum, ReadDetail def read_statistics_once_read(requests, obj):
ct = ContentType.objects.get_for_model(obj)
key = '{}_{}_read'.format(ct.model, obj.pk) # 获取并处理阅读计数
if not requests.COOKIES.get(key):
# 总阅读量+1
readnum, created = ReadNum.objects.get_or_create(content_type=ct, object_id=obj.pk)
# 处理阅读量
readnum.read_num += 1
readnum.save() # 当天阅读量+1
date = timezone.now().date()
readDetail, created = ReadDetail.objects.get_or_create(content_type=ct, object_id=obj.pk, date=date)
readDetail.read_num += 1
readDetail.save() return key def get_seven_days_read_data(content_type):
today = timezone.now().date()
dates = []
read_nums = []
for i in range(7, 0, -1):
date = today - datetime.timedelta(days=i)
dates.append(date.strftime('%m/%d'))
read_details = ReadDetail.objects.filter(content_type=content_type, date=date)
result = read_details.aggregate(read_num_sum=Sum('read_num'))
read_nums.append(result['read_num_sum'] or 0)
return dates, read_nums
utils.py
.home-content {
font-size: 222%;
text-align: center;
margin-top: 4em;
margin-bottom: 2em;
} div#container {
margin: 0 auto;
height: 20em;
min-width: 20em;
max-width: 30em;
}
home.css
{% extends 'base.html' %}
{% load staticfiles %} {% block header_extends %}
<link rel="stylesheet" href="{% static 'css/home.css' %}">
<script src="{% static 'Highcharts-6.2.0/code/highcharts.js' %}"></script>
{% endblock %} {% block title %}
我的博客|首页
{% endblock %} {% block content %} <h1 class="home-content">欢迎访问我的博客</h1> <!-- 图表容器 DOM -->
<div id="container"></div>
<!-- 引入 highcharts.js -->
<script>
// 图表配置
let options = {
chart: {
type: 'line' //指定图表的类型,默认是折线图(line)
},
title: {
text: null // 标题
},
xAxis: {
categories: {{ dates|safe }} // x 轴分类
},
yAxis: {
title: {
text: null // y 轴标题
},
labels: {
enabled: false
},
gridLineDashStyle: 'Dash',
},
plotOptions: {
line: {
dataLabels: {
enabled: true
}
}
},
credits: {
enabled: false // 禁用版权信息
},
series: [{ // 数据列
name: '阅读量', // 数据列名
data: {{ read_nums }},// 数据
showInLegend: false, // 设置为 false 即为不显示在图例中
},]
};
// 图表初始化函数
let chart = Highcharts.chart('container', options);
</script>
{% endblock %} {% block js %}
{# 将首页这个按钮设置激活状态 #}
<script>
$(".nav-home").addClass("active").siblings().removeClass("active");
</script>
{% endblock %}
home.html
3、解释
这里使用了图表框架highcharts,官网:官方文档
搭建自己的博客(十七):添加每日阅读量并使用highcharts通过图表显示的更多相关文章
- 一步步搭建自己的博客 .NET版(2、评论功能)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
- 在jekyll模板博客中添加网易云模块
最近使用GitHub Pages + Jekyll 搭建了个人博客,作为一名重度音乐患者,博客里面可以不配图,但是不能不配音乐啊. 遂在博客里面引入了网易云模块,这里要感谢网易云的分享机制,对开发者非 ...
- 基于hexo+github搭建一个独立博客
一直听说用hexo搭建一个拥有自己域名的博客是很酷炫的事情~,在这十一花上半个小时整个hexo博客岂不美哉. 使用Hexo吸引我的是,其简单优雅, 而且风格多变, 适合程序员搭建个人博客,而且支持多平 ...
- 使用hexo+github搭建免费个人博客详细教程
[TOC] 本文目录(注意无法点击): 前言 体验更加排版请访问原文链接:http://blog.liuxianan.com/build-blog-website-by-hexo-github.htm ...
- 2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客
序,Node是基于V8引擎的服务器端脚本语言. 基础准备 Node.js: Express:本文用的是3.21.2版本,目前最新版本为4.13.3,Express4和Express3还是有较大区别,可 ...
- 第1章 Express MongoDB 搭建多人博客
学习环境 Node.js : 0.10.22 + Express : 3.4.4 + MongoDB : 2.4.8 + 快速开始 安装 Express express 是 Node.js 上最流行的 ...
- Hexo搭建Github静态博客
1. 环境环境 1.1 安装Git 请参考[1] 1.2 安装node.js 下载:http://nodejs.org/download/ 可以下载 node-v0.10.33-x64.msi 安装时 ...
- 如何搭建一个独立博客——简明Github Pages与Hexo教程
摘要:这是一篇很详尽的独立博客搭建教程,里面介绍了域名注册.DNS设置.github和Hexo设置等过程,这是我写得最长的一篇教程.我想将我搭建独立博客的过程在一篇文章中尽可能详细地写出来,希望能给后 ...
- Hexo搭建静态个人博客
Hexo简介 之前在Github上托管的博客就是使用jekyll搭建的,官方的Github Pages同样推荐使用它.我之前体验了一下jekyll,没有达到我想要的效果.于是寻找替代方案,搜索同类博客 ...
随机推荐
- BSGS和EXBSGS
也许更好的阅读体验 \(Description\) 给定\(a,b,p\),求一个\(x\)使其满足\(a^x\equiv b\ \left(mod\ p\right)\) \(BSGS\) \(BS ...
- Python 在气象上的应用
Python 在气象上的应用 grug350关注 0.7892019.03.15 23:19:31字数 913阅读 1,024 为什么选择python 免费和开源,没有商业许可限制anaconda p ...
- Datatable批量导入到表
封装批量提交数据到表,用于数据同步作业 private string GetSelectFieldNames(DataTable dataTable, string tableName = " ...
- android studio 开发环境配置
android studio 开发环境配置 参考: 第一次使用Android Studio时你应该知道的一切配置 https://www.cnblogs.com/qianguyihao/p/43909 ...
- ajax中的事件
blur : 当光标移开时(点击)触发 change : 当光标移开并且文本框中的内容和上一次不一致时(点击)触发
- 【转载】Sqlserver使用SUBSTRING函数截取字符串
在SQL语句查询过程中,Sqlserver支持使用LEFT().RIGHT().SUBSTRING()等几个函数对字符串进行截取操作,SubString函数相对于其他两个函数来说更灵活,使用场景更多, ...
- ext TreePanel树节点操作
1.全部展开 tree.expandAll();2.全部收缩 tree.collapseAll();3.得到父节点 node.parentNode4.判断是否有父节点 node.parentNode= ...
- STM8 定时器
中断映射表 对应stm8_interrupt.c #pragma vector=1 __interrupt void TRAP_IRQHandler(void) { } #pragma vector= ...
- python使用Pyinstaller打包
一.前言 python文件打包,将.py文件转化成.exe文件(windows平台),可以使用Pyinstaller来打包 Pyinstaller可以在全平台下使用,但是请注意打包生成的文件不能在全平 ...
- zookeeper安装简要步骤
vi zoo.cfg1.dataDir=/var/zookeeper2.server.1=zoo1:2888:3888server.2=zoo2:2888:3888server.3=zoo3:2888 ...