【问题标题】:Call a Flask function every few minutes每隔几分钟调用一次 Flask 函数
【发布时间】:2014-12-31 13:14:26
【问题描述】:

在我的 HTML 页面上,我有一个获取函数 getStatus() 值的跨度:

<span id="sysStatus" style="font-weight: bold;">{{ status }}</span>

返回状态的函数:

def getStatus():
    state = database().getState()
    if state:
        status = " On"
    else:
        status = "Off"
    return status

渲染html页面:

class Tongles(flask.views.MethodView):
    def get(self):
        return flask.render_template('page.html', status=getStatus())

我想以某种方式动态刷新系统的状态,以及 span 上的文本。

如何在不重新加载整个页面的情况下调用 getStatus 函数?

【问题讨论】:

  • Flask 应用程序不同于普通的 Python 应用程序。因为他们必须更新和 HTML 部分。我可以每隔几分钟轻松执行 Python 函数,但重点是动态更新跨度文本,这是对用户的指示。
  • 理论解决方案:制作一个特殊的flask handler专门返回状态,然后在客户端请ajax定期查询状态。
  • 您可以使用套接字或使用 AJAX 请求轮询服务器以获取 getStatus

标签: python html flask


【解决方案1】:

flask_app.py 将路由添加到您的 getStatus 方法

...
@app.route("/myStatus")
def getStatus():
    state = database().getState()
    if state:
        status = " On"
    else:
        status = "Off"
    return status
 ...

page.html 使用 ajax 回调来使用 jquery(或其他如果你想要的)填充 div

...

<span id="sysStatus" style="font-weight: bold;">{{ status }}</span>

...
...

<script>
$(document).ready(function() {
    setInterval("ajaxd()",10000); // call every 10 seconds
});

function ajaxd() { 
  //reload result into element with id "sysStatus"
  $("#sysStatus").load("/myStatus", function() {  alert( "Load was performed." ); });

}
</script>

...

【讨论】:

  • 感谢您的回答 Jorn,但它似乎不适用于我的应用程序。不过,我会试着弄清楚。
  • 其实我在getStatus函数里面放了一个print来检查这个函数是否被脚本调用了,但是没有。
  • 是的,我注意到了这一点,并从一开始就从 url 中删除了 r。但是,它不会每 10 秒调用一次调用函数。我想尝试使用 jsonify 返回状态。你怎么看?有必要吗?
  • 你应该能够加载它......它应该每 10 秒调用一次......
  • 我在负载中添加了一个警报,因此您应该能够在新内容加载时看到警报...看起来我之前可能有不平衡的括号,所以函数可能崩溃了...
猜你喜欢
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 2020-09-30
  • 2010-11-16
  • 2017-11-15
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多