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解析xml模块封装代码
Feb 07 Python
python网页请求urllib2模块简单封装代码
Feb 07 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
python 数据提取及拆分的实现代码
Aug 26 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
python实现井字棋小游戏
Mar 04 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
python 模拟在天空中放风筝的示例代码
Apr 21 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二分法在IP地址查询中的应用
2008/08/12 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
Prototype Class对象学习
2009/07/19 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
Python标准库sched模块使用指南
2017/07/06 Python
python中类的属性和方法介绍
2018/11/27 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
后勤自我鉴定
2013/10/13 职场文书
医学生职业规划范文
2014/01/05 职场文书
小学音乐教学反思
2014/02/05 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
小学母亲节活动方案
2014/03/14 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
导师工作推荐信范文
2014/05/17 职场文书
审计班子对照检查材料
2014/08/27 职场文书
实习生工作证明范本
2014/09/14 职场文书
优秀班主任申报材料
2014/12/16 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers