django+echart数据动态显示的例子


Posted in Python onAugust 12, 2019

目标:从plc采集数据到数据库,利用echart绘制实时动态曲线。

1 思路

- django定时执行任务,将数据推送到echart。

- 前端定时读取后端数据,并显示到echart上。

第一种思路貌似走不通,主要考虑第二种方式。

第二种方式首先想到的是利用javascript直接读取数据库,并定时更新echart曲线。

后来了解js只是前端语言,没有访问数据库的能力,因此最后转向ajax。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

这个正是我需要的功能。

2、任务分解

- echart动态曲线显示如何实现(官方有例程)

- ajax如何使用(runoob ajax教程)

- django后台数据准备

3、执行

ajax.html

<!DOCTYPE html>
<html>
 
<head>
 
	{% load static %}
	<script src="{% static 'myapp/json2.js'%}"></script>
	<script src="{% static 'myapp/echarts.js'%}"></script>
	<script src="{% static 'myapp/matplotlib.js'%}"></script>
 
	<meta charset="utf-8">
 
</head>
 
<body>
 
	<div id="main" style="background-color:#eceaea; width: 800px; height:600px;"></div>
 
	<div id="myDiv">
		<h2>使用 AJAX 修改该文本内容</h2></div>
	<button type="button" οnclick="loadXMLDoc()">修改内容</button>
 
 
 
	<script>
		var json = {{myContext | safe}}
		var jstr = JSON.stringify(json)
		var option = JSON.parse(jstr)
		// console.log(option)
 
		<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
		// 基于准备好的dom,初始化echarts实例
		var myChart = echarts.init(document.getElementById('main'), 'matplotlib');
 
		// 使用刚指定的配置项和数据显示图表。
		myChart.setOption(option);
 
 
		function loadXMLDoc() {
			var xmlhttp;
			if (window.XMLHttpRequest) {
				// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
				xmlhttp = new XMLHttpRequest();
			} else {
				// IE6, IE5 浏览器执行代码
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					//document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
					//content = "{{ myContext }}";
					//console.log(content)
 
					//var json = xmlhttp.responseText;
					//var jstr = JSON.stringify(json)
					option = JSON.parse(xmlhttp.responseText)
 
					// 使用刚指定的配置项和数据显示图表。
					myChart.setOption(option);
					//console.log(option);
 
				}
			}
			xmlhttp.open("GET", "/myapp/mytext", true);
			xmlhttp.send();
		}
 
 
		setInterval(loadXMLDoc, 500);
	</script>
 
</body>
 
</html>

django后台程序

def mytext(request):
  #df = pd.read_csv(r'E:\mywebsite\ui\myapp\xx.csv')
 
  import random
 
  # dfx = pd.DataFrame()
  # dfx['a'] = ['2017-08-08','2017-08-09','2017-08-10']
  # dfx['b'] = [random.random(),random.random(),random.random()]
  # dfx['c'] = [random.random(),random.random(),random.random()]
  #
  # dfx['a'] = pd.to_datetime(dfx.a)
  #
  # dfx = dfx.set_index('a')
 
 
  import sqlite3
  conn = sqlite3.connect(r"E:\01_Lab\L02_Ads\practise\ads_sample\multi_freq_data\multi_freq_data\bin\x86\Debug\db_all.db")
  df = pd.read_sql('select * from buffer',conn)
  df = df.set_index(pd.to_datetime(df.TimeStamp))
  dfn = pd.DataFrame()
  dfn['ws'] = df.grWindSpeed.astype(float)
 
  dfn = dfn.tail(500)
 
  option = de.eplot(dfn,1)
  str_option = json.dumps(option)
  context = {"myContext": str_option}
 
  #return render(request,'myapp/a.html',context)
  return HttpResponse(str_option)
 
 
def test_ajax(request):
 
  import sqlite3
  conn = sqlite3.connect(r"E:\01_Lab\L02_Ads\practise\ads_sample\multi_freq_data\multi_freq_data\bin\x86\Debug\db_all.db")
  df = pd.read_sql('select * from buffer',conn)
  df = df.set_index(pd.to_datetime(df.TimeStamp))
  dfn = pd.DataFrame()
  dfn['ws'] = df.grWindSpeed.astype(float)
 
  dfn = dfn.tail(500)
 
  option = de.eplot(dfn,1)
  str_option = json.dumps(option)
  context = {"myContext": str_option}
 
 
  #context = {"myContext": {'a':[1,2],'b':[3,4]}}
  return render(request, 'myapp/ajax.html', context)

前端通过访问mytext函数获取到一个字符串,通过json.parse()转为echart对象。

最后,利用js定时功能setInterval(func1,1000)定时功能,定时读取数据并更新echart图表。

以上这篇django+echart数据动态显示的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python控制台中实现进度条功能
Nov 10 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
python同步两个文件夹下的内容
Aug 29 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
Python random库使用方法及异常处理方案
Mar 02 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
python的Jenkins接口调用方式
May 12 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 #Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 #Python
python内存管理机制原理详解
Aug 12 #Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 #Python
python实现图片压缩代码实例
Aug 12 #Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 #Python
一行Python代码过滤标点符号等特殊字符
Aug 12 #Python
You might like
PHP mkdir()定义和用法
2009/01/14 PHP
理解PHP中的stdClass类
2014/04/18 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python 调用Java实例详解
2017/06/02 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
python装饰器使用实例详解
2019/12/14 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
好人好事事迹材料
2014/02/12 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
个人安全生产承诺书
2014/05/22 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript