使用 Flask 从 API 连续获取实时数据

问题描述 投票:0回答:1

我正在使用 Python 中的 Flask 构建我的第一个基本网站。我已经成功创建了一个网站,在其中从 API(具体来说,

ThingSpeak
)检索值,并将它们显示在表格中。我当前的挑战是弄清楚是否可以从 API 获取实时数据,而无需重新运行我的代码。

就目前情况而言,每次运行代码时,我都会从 API 中获取值。但是,我正在寻找一种连续接收更新值的方法,而无需手动重新运行代码。有没有一种方法或途径可以在我的 Flask 应用程序中实现这种实时数据更新?

python flask flask-sqlalchemy
1个回答
0
投票

通常我会提供经过充分调试和测试的答案,但 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 元素并将其附加到值表中供查看者查看 - 不太难。

© www.soinside.com 2019 - 2024. All rights reserved.