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 文件和输入输出小结
Oct 09 Python
python使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
使用Python操作excel文件的实例代码
Oct 15 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
python采集微信公众号文章
Dec 20 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 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获取linux命令结果的实例
2017/03/13 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
python如何实现反向迭代
2018/03/20 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
医学生自荐信范文
2013/12/03 职场文书
教师节促销活动方案
2014/02/14 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python