Python 每隔几分钟调用一个Flask函数

Python 每隔几分钟调用一个Flask函数,python,html,flask,Python,Html,Flask,在我的HTML页面上,我有一个span,它获取函数getStatus()的值: 呈现html页面: class Tongles(flask.views.MethodView): def get(self): return flask.render_template('page.html', status=getStatus()) 我想以某种方式动态刷新系统的状态,以及span上的文本 如何在不重新加载整个页面的情况下调用函数getStatus?flask\u app.p

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

呈现html页面:

class Tongles(flask.views.MethodView):
    def get(self):
        return flask.render_template('page.html', status=getStatus())
我想以某种方式动态刷新系统的状态,以及span上的文本


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

flask\u 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

。。。
{{status}}
...
...
$(文档).ready(函数(){
setInterval(“ajaxd()”,10000);//每10秒调用一次
});
函数ajaxd(){
//将结果重新加载到id为“sysStatus”的元素中
$(“#sysStatus”).load(“/myStatus”,function(){alert(“加载已执行”);});
}
...

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

。。。
{{status}}
...
...
$(文档).ready(函数(){
setInterval(“ajaxd()”,10000);//每10秒调用一次
});
函数ajaxd(){
//将结果重新加载到id为“sysStatus”的元素中
$(“#sysStatus”).load(“/myStatus”,function(){alert(“加载已执行”);});
}
...

Flask应用程序与普通Python应用程序不同。因为他们必须更新HTML部分。我可以很容易地每隔几分钟执行一次Python函数,但重点是动态更新span文本,这是用户的指示。理论解决方案:制作一个特殊的flask处理程序专门返回状态,然后在客户端请ajax定期查询状态。您可以使用套接字或使用ajax请求轮询服务器的
getStatus
。flask应用程序与普通Python应用程序不同。因为他们必须更新HTML部分。我可以很容易地每隔几分钟执行一次Python函数,但重点是动态更新span文本,这是用户的指示。理论解决方案:制作一个特殊的flask处理程序专门返回状态,然后在客户端请ajax定期查询状态。您可以使用套接字或使用ajax请求轮询服务器的
getStatus
。感谢你的答案Jorn,但它似乎不适用于我的应用程序。不过我会想办法的。实际上,我在getStatus函数中添加了一个打印项,以检查该函数是否已从脚本中调用,但是,它没有。是的,我注意到了这一点,从一开始我就从url中删除了r。但是,它不会每10秒调用一次回调函数。我想尝试使用jsonify返回状态。你怎么认为?有必要吗?你应该可以加载它。。。它应该每10秒调用一次…我在加载中添加了一个警报,这样当加载新内容时,您应该能够看到警报。。。看起来我以前可能有未删减的括号,所以可能函数崩溃了…谢谢你的回答Jorn,但它似乎不适用于我的应用程序。不过我会想办法的。实际上,我在getStatus函数中添加了一个打印项,以检查该函数是否已从脚本中调用,但是,它没有。是的,我注意到了这一点,从一开始我就从url中删除了r。但是,它不会每10秒调用一次回调函数。我想尝试使用jsonify返回状态。你怎么认为?有必要吗?你应该可以加载它。。。它应该每10秒调用一次…我在加载中添加了一个警报,这样当加载新内容时,您应该能够看到警报。。。看起来我以前可能有未消除的括号,所以可能函数崩溃了。。。
...
@app.route("/myStatus")
def getStatus():
    state = database().getState()
    if state:
        status = " On"
    else:
        status = "Off"
    return status
 ...
...

<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>

...