Django Highcharts制作图表


Posted in Python onAugust 27, 2016

在运维工作总很多数据最终的展现方式要用到图表,毕竟用图来展示要比一堆数字更直观些,比如利用率、站点的PV,UV等,大家千万不要觉得看到很多漂亮的图就感觉很难,其实真心不是,因为现在有很多前端的绘图库,你只需要按它要求的格式(json)提供给前端接口,什么曲线图、饼图,还有你从来都不知道的图都可以生成出来,现在用的比较多的是highcharts,echarts等,django-highcharts是django的一个集成库,使用它在django里更方便绘制出我们想要的图表,所以这篇文章就使用它来完成一个超小项目,实现一个站点的PV,UV曲线图, 另外我一直认为公众号其实不太合适贴太多的代码,要看代码最好还是用专业的编辑器,如果通篇都是代码,我估计很多人直接就收藏了,时间久了自己都忘了,起不到真正学习的目的, 所以今天我重点还是讲使用步骤,确保下次大家开发的时候会用,代码只是辅助,当然核心的我也会全部贴出来,但完整的代码限于篇幅就不在贴了,另外这篇是需要小伙伴们有django一点点基础的,如果没有任何基础,可能需要先了解下基本mvc的概念,否则你可能会看的云里雾里, 其它不多说了,现在开始,我先介绍下开发环境:

python 2.7 + django1.8.2 + mysql (版本随意)

第一步,安装django-higchats,这个根据大家使用的环境即可,pip或直接用pycharm工具安装都可以。

第二步,新建project 和app

第三步,以上做完,就可以敲代码了,先建models,就是数据库表的表结构,日常站点访问数据PV,UV数据可以插入到这个表里,一会我们要使用。

第四步,图表模块代码编写,这部分主要是一个类从数据库表中获取数据,然后将数据提供给图形展示类,代码如下:

class pudata(object):
 
  def __init__(self, dbobj):
    self.dbobj = dbobj
    self.pdays = self.dbobj.objects.all()
 
  def mpvdate(self):
    res = {}
    for v in self.pdays:
      res[v.days] = v.pvisitor
    res = collections.OrderedDict(sorted(res.items(), key=lambda d: d[0]))
    return res
 
  def muvdate(self):
    res = {}
    for v in self.pdays:
      res[v.days] = v.uvisitor
    res = collections.OrderedDict(sorted(res.items(), key=lambda d: d[0]))
    return res
 
class MindgViewPv(HighChartsMultiAxesView):
  p = pudata(mindg)
  title = 'mindg.cn'
  tooltip = {'shared': 'true'}
  chart_type = 'spline'
  categories = p.mpvdate().keys()
 
  @property
  def yaxis(self):
    y_axis = [
    {
      'title': {
        'text': 'PV'
      },
    }
    ]
    return y_axis
 
  @property
  def series(self):
    p = pudata(mindg)
    series = [
      {
      'name': 'mindg.cn',
      'data': p.icypvdate().values()
      }]
    return series

第五步,模板层代码,模板采用ajax方式,从后台获取的json数据给highcharts然后绘制曲线图,代码如下:

{% extends 'head_css.html' %}
{% load highcharts_tags %}
 
{% block js %}
 <script type="text/javascript">
  $(function (){
    $.getJSON("{% url 'mpv' %}", function(data) {
      $('#container').highcharts(data);
    });
  });
  </script>
 {% endblock %}

有了上面的代码,就可以通过view函数将mindg.html 渲染出来了,最终图如下:

Django Highcharts制作图表

关于highcharts的使用就介绍到这里,如有疑问请我直接留言。

Python 相关文章推荐
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 Python
python网络编程学习笔记(一)
Jun 09 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
python yield和Generator函数用法详解
Feb 10 Python
python实现简单颜色识别程序
Feb 19 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Python的历史与优缺点整理
May 26 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 Python
Python连接DB2数据库
Aug 27 #Python
使用python绘制常用的图表
Aug 27 #Python
python实现实时监控文件的方法
Aug 26 #Python
Python爬取京东的商品分类与链接
Aug 26 #Python
Python设计模式之抽象工厂模式
Aug 25 #Python
简单谈谈python中的Queue与多进程
Aug 25 #Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 #Python
You might like
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
php中chdir()函数用法实例
2014/11/13 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
node.js require() 源码解读
2015/12/13 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
十岁生日家长答谢词
2014/01/17 职场文书
创先争优活动方案
2014/02/12 职场文书
学生实习证明范文
2014/09/28 职场文书
自荐信格式模板
2015/03/27 职场文书
演讲比赛主持词
2015/06/29 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python