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中cPickle用法例子分享
Jan 03 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python数据操作方法封装类实例
Jun 23 Python
详解python配置虚拟环境
Apr 08 Python
Python实现插入排序和选择排序的方法
May 12 Python
Python实现TCP通信的示例代码
Sep 09 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
详解Python中的Lock和Rlock
Jan 26 Python
pytorch中的numel函数用法说明
May 13 Python
Python合并多张图片成PDF
Jun 09 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的可变变量名的使用方法分享
2012/02/05 PHP
php实现对象克隆的方法
2015/06/20 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
thinkphp分页集成实例
2017/07/24 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python 如何访问外围作用域中的变量
2016/09/11 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python hash每次调用结果不同的原因
2019/11/21 Python
详解python 中in 的 用法
2019/12/12 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
一文读懂Python 枚举
2020/08/25 Python
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
日本语毕业生自荐信
2014/02/01 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL
TS 类型兼容教程示例详解
2022/09/23 Javascript