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中用format函数格式化字符串的用法
Apr 08 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
Python中Threading用法详解
Dec 27 Python
详解python while 函数及while和for的区别
Sep 07 Python
python实现网页自动签到功能
Jan 21 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
python实现自动化群控的步骤
Apr 11 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 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下通过POST还是GET来传值
2008/06/05 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python显示生日是星期几的方法
2015/05/27 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
自考自我鉴定范文
2013/10/30 职场文书
保险经纪人求职信
2014/03/11 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
追讨欠款律师函
2015/05/27 职场文书
天气温馨提示语
2015/07/14 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL