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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
Python的条件语句与运算符优先级详解
Oct 13 Python
浅谈function(函数)中的动态参数
Apr 30 Python
python 第三方库的安装及pip的使用详解
May 11 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
pytorch 实现查看网络中的参数
Jan 06 Python
python 实现弹球游戏的示例代码
Nov 17 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
十个Python自动化常用操作,即拿即用
May 10 Python
浅谈python中的多态
Jun 15 Python
理解python中装饰器的作用
Jul 21 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python CSV模块使用实例
2015/04/09 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python自动扫雷实现方法
2015/07/25 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
计生专干事迹
2014/05/28 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
体育部部长竞选稿
2015/11/21 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB