时间:2021-05-22
目标:从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数据动态显示的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JavaScript实现同步于本地时间的动态时间显示方法。分享给大家供大家参考。具体分析如下:动态显示时间的例子非常简单,了解JavaScript
在Matlab使用Plot函数实现数据动态显示方法总结中介绍了两种实现即时数据动态显示的方法。考虑到使用python的人群日益增多,再加上本人最近想使用pyth
前言:由于使用Django框架来做网站,需要动态显示数据库内的信息,所以读取数据库必须要做,写此博文来记录。接下来分两步来做这个事,添加网页,读取数据库;一、添
在小程序中使用Echart图表EchartUI构建(柱状图)Echart假数据Echart动态设置数据柱状图UI示例//Echartconfig,包括initd
本文实例讲述了JS实现HTML页面中动态显示当前时间。分享给大家供大家参考,具体如下:www.jb51.netJS动态显示时间vartimer=null;fun