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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python函数式编程指南(二):从函数开始
Jun 24 Python
Python 多核并行计算的示例代码
Nov 07 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
python实现AES加密与解密
Mar 28 Python
Python中format()格式输出全解
Apr 12 Python
使用Python实现分别输出每个数组
Dec 06 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
如何写python的配置文件
Jun 07 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 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显示时间常用方法小结
2015/06/05 PHP
javascript 定义新对象方法
2010/02/20 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
详解vue组件开发脚手架
2018/06/15 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
Python中super关键字用法实例分析
2015/05/28 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
python各类经纬度转换的实例代码
2019/08/08 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
pygame实现飞机大战
2020/03/11 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
全陪导游欢迎词
2014/01/17 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
三国演义读书笔记
2015/06/25 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle