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学习笔记 下载
Feb 10 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
浅谈Python中的bs4基础
Oct 21 Python
Python enumerate函数功能与用法示例
Mar 01 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
python二进制文件的转译详解
Jul 03 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
python实现超市商品销售管理系统
Nov 22 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
golang特有程序结构入门教程
Jun 02 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 session_start()出错原因分析及解决方法
2013/10/28 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
PHP Cookie学习笔记
2016/08/23 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
jquery json 实例代码
2010/12/02 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
JS如何生成动态列表
2020/09/22 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
python创建n行m列数组示例
2019/12/02 Python
python编写俄罗斯方块
2020/03/13 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
二年级学生评语大全
2014/04/23 职场文书
市场营销计划书
2015/01/17 职场文书
爱心捐书倡议书
2015/04/27 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android