django+echart数据动态显⽰的例⼦⽬标:从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" ></div>
django项目实例<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.ElementById('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");
}
if (adyState == 4 && xmlhttp.status == 200) {
//ElementById("myDiv").sponseText;
//content = "{{ myContext }}";
//console.log(content)
//var json = sponseText;
//var jstr = JSON.stringify(json)
option = JSON.sponseText)
/
/ 使⽤刚指定的配置项和数据显⽰图表。
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 x.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 = t(r"E:\01_Lab\L02_Ads\practise\ads_sample\multi_freq_data\multi_freq_data\bin 86\Debug\db_all.db")  df = pd.read_sql('select * from buffer',conn)
df = df.set__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 = t(r"E:\01_Lab\L02_Ads\practise\ads_sample\multi_freq_data\multi_freq_data\bin 86\Debug\db_all.db")  df = pd.read_sql('select * from buffer',conn)
df = df.set__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数据动态显⽰的例⼦就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。