我正在使用 Python 中的 Flask 构建我的第一个基本网站。我已经成功创建了一个网站,在其中从 API(具体来说,
ThingSpeak
)检索值,并将它们显示在表格中。我当前的挑战是弄清楚是否可以从 API 获取实时数据,而无需重新运行我的代码。
就目前情况而言,每次运行代码时,我都会从 API 中获取值。但是,我正在寻找一种连续接收更新值的方法,而无需手动重新运行代码。有没有一种方法或途径可以在我的 Flask 应用程序中实现这种实时数据更新?
通常我会提供经过充分调试和测试的答案,但 Javascript 和 Flask 确实不是我的菜,所以我只能给你指点,让你填空并解决问题。
因此,基本思想是在 HTML 文件中添加一个 Javascript 函数(在代码中标记为
1
),该函数设置一个间隔计时器(在代码中为 2
),例如每 5 秒一次。当该间隔过去时,将调用函数 (3
)。在该函数中,您向 Flask(代码中的 4
)应用程序发出 AJAX 请求(代码中的 5
)。您的 Flask 应用程序收集最新数据并将其发送回 Javascript 函数(代码中的 6
),然后该函数可以将包含最新数据的新行附加到网页(代码中的 7
)。
该代码是针对另一个应用程序的,因此它一点也不完美 - 它是概念性的,但为您提供了形状和要查看的内容。
这将从 Google 获取 jQuery 库,将其放置在 HTML 中的
<head>...</head>
标签内。 jQuery 允许您对 $.getJSON()
进行 AJAX 调用。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
然后,这段代码就出现在 HTML 中的结束
</body>
之前:
<script type="text/javascript">
{# https://flask.palletsprojects.com/en/2.0.x/patterns/jquery/ #}
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
function requestUpdate() { // 3
console.log("requesting update");
$.getJSON($SCRIPT_ROOT + '/_refresh', { // 4
"GIMME SOME DATA";
}, function(data) {
console.log("Received:" + data); // 7
});
return false;
}
$(document).ready(function() { // 1
console.log("document ready");
setInterval(requestUpdate, 5000); // 2
});
</script>
然后你的 Flask 应用程序需要一个位于
/_refresh
的路由来响应来自 Javascript 的 AJAX 请求。为此,您可能需要在 Flask 应用程序中导入大部分内容:
from flask import jsonify, request, url_for, redirect, session
然后您将需要
/_refresh
路线,如下所示:
@app.route('/_refresh') # 5
def refresh():
print(request.args)
# Query your Thingspeak here and then pass the new data back to Javascript below
response = {
'Status' : 'Success',
'data': "A new line derived from Thingspeak",
}
return jsonify(response) # 6 - send the result to client
在打开网络浏览器控制台的情况下运行此代码 - 它将位于浏览器的“开发人员工具”或“调试工具”设置中,然后您将看到所有消息。
(7) 的代码不多,您需要编写 2-3 行 Javascript 来创建一个新的 HTML 元素并将其附加到值表中供查看者查看 - 不太难。