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导入至excel
Nov 20 Python
Python时间戳使用和相互转换详解
Dec 11 Python
详解Python使用tensorflow入门指南
Feb 09 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python提取照片坐标信息的实例代码
Aug 14 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
学python爬虫能做什么
Jul 29 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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中的integer类型使用分析
2010/07/27 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php实现图片缩放功能类
2013/12/18 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
浅析用prototype定义自己的方法
2013/11/14 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
Python进阶篇之字典操作总结
2016/11/16 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
对python中dict和json的区别详解
2018/12/18 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python实现一个优先级队列的方法
2020/07/31 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
大学生护理专业自荐信
2013/10/03 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
党支部综合考察材料
2014/05/19 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
医院营销工作计划
2015/01/16 职场文书
防卫过当辩护词
2015/05/21 职场文书
庆元旦主持词
2015/07/06 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers