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获得图片base64编码示例
Jan 16 Python
Python Tkinter GUI编程入门介绍
Mar 10 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
Python实现Kmeans聚类算法
Jun 10 Python
Java文件与类动手动脑实例详解
Nov 10 Python
PyTorch中的Variable变量详解
Jan 07 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
PyTorch 如何自动计算梯度
May 23 Python
利用Pycharm连接服务器的全过程记录
Jul 01 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
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
js实现数组转换成json
2015/06/26 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
sublime python3 输入换行不结束的方法
2018/04/19 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
真诚的求职信
2014/07/04 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
2016年清明节寄语
2015/12/04 职场文书
MySQL事务的隔离级别详情
2022/07/15 MySQL