之前写了单篇博客的阅读量统计,今天添加了博客总阅读量统计,并且使用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通过图表显示的更多相关文章

  1. 一步步搭建自己的博客 .NET版(2、评论功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  2. 在jekyll模板博客中添加网易云模块

    最近使用GitHub Pages + Jekyll 搭建了个人博客,作为一名重度音乐患者,博客里面可以不配图,但是不能不配音乐啊. 遂在博客里面引入了网易云模块,这里要感谢网易云的分享机制,对开发者非 ...

  3. 基于hexo+github搭建一个独立博客

    一直听说用hexo搭建一个拥有自己域名的博客是很酷炫的事情~,在这十一花上半个小时整个hexo博客岂不美哉. 使用Hexo吸引我的是,其简单优雅, 而且风格多变, 适合程序员搭建个人博客,而且支持多平 ...

  4. 使用hexo+github搭建免费个人博客详细教程

    [TOC] 本文目录(注意无法点击): 前言 体验更加排版请访问原文链接:http://blog.liuxianan.com/build-blog-website-by-hexo-github.htm ...

  5. 2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客

    序,Node是基于V8引擎的服务器端脚本语言. 基础准备 Node.js: Express:本文用的是3.21.2版本,目前最新版本为4.13.3,Express4和Express3还是有较大区别,可 ...

  6. 第1章 Express MongoDB 搭建多人博客

    学习环境 Node.js : 0.10.22 + Express : 3.4.4 + MongoDB : 2.4.8 + 快速开始 安装 Express express 是 Node.js 上最流行的 ...

  7. Hexo搭建Github静态博客

    1. 环境环境 1.1 安装Git 请参考[1] 1.2 安装node.js 下载:http://nodejs.org/download/ 可以下载 node-v0.10.33-x64.msi 安装时 ...

  8. 如何搭建一个独立博客——简明Github Pages与Hexo教程

    摘要:这是一篇很详尽的独立博客搭建教程,里面介绍了域名注册.DNS设置.github和Hexo设置等过程,这是我写得最长的一篇教程.我想将我搭建独立博客的过程在一篇文章中尽可能详细地写出来,希望能给后 ...

  9. Hexo搭建静态个人博客

    Hexo简介 之前在Github上托管的博客就是使用jekyll搭建的,官方的Github Pages同样推荐使用它.我之前体验了一下jekyll,没有达到我想要的效果.于是寻找替代方案,搜索同类博客 ...

随机推荐

  1. 接口中的方法都自动的被设置为public,接口中的域被自动设置为public static final

    接口中的方法都自动的被设置为public,接口中的域被自动设置为public static final

  2. 调用WebService时加入身份验证,以拒绝未授权的访问

    众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务.但在有些时候的某些应用服务不希望被未授权访问,那么此时我们可以一下几种 ...

  3. Spring Cloud Alibaba学习笔记(12) - 使用Spring Cloud Stream 构建消息驱动微服务

    什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互, ...

  4. 数据库中间件之mycat读写分离

    mycat核心概念 逻辑库 mycat中定义.管理的数据库 逻辑表 逻辑库中包含的需分库分表存储的表 datanode 数据节点(分片节点),逻辑表分片的存放节点 datahost 数据主机(节点主机 ...

  5. C# async 和 await 理解

    C# async 和 await 理解 先假设如下场景: 主函数 Main,循环等待用户输入: 计算函数 Cal,耗时计算大量数据: class Test { static int Main(stri ...

  6. win7 ReadyBoot 文件位置修改

    右键我的电脑,依次点开系统工具-性能-数据收集器集-系统-事件跟踪会话 在右边找到ReadyBoot,右键打开属性,会话框上方选择文件,根据示例文件名的路径找到ReadyBoot.etl文件,复制到你 ...

  7. 拦截器中获取不到controller注解问题

    刚刚在测试接口的时候发现一个奇怪的问题:通过拦截器获取 controller 类注解,有些能获取到,有些又不能获取到,见鬼了. [环境]: 1. springboot :2.2.0.RELEASE [ ...

  8. 关于MQ的几件小事(三)如何保证消息不重复消费

    1.幂等性 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.幂等函数,或 ...

  9. git clone github上的项目失败 RPC failed

    error: RPC failed; curl 18 transfer closed with outstanding read data remainingfatal: the remote end ...

  10. jQuery AJAX基础

    一.JSON 定义:             JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式.         它基于 ECMAScript ...