首页 > 解决方案 > 在 FLASK 中,有没有办法在页面打开时运行 python 函数?

问题描述

我得到了 FLASK 应用程序,其中一条路线呈现具有特定参数的 Folium 地图。folium 地图被加载到每 x 分钟刷新一次的 iframe 中。地图生成由 html 表单触发。

烧瓶部分:

@app.route('/hermesmap', methods=['GET','POST']) 
def hermesMap():  
 
if request.method == "POST": 
    userName = request.form['username'] 
    password = request.form['password'] 
    server = request.form['server']  
    server = server[8:-1]
    ascii_pass = base64.urlsafe_b64encode(password.encode("ASCII"))

    sshpass = str(ascii_pass)
    
    sshpass = sshpass.replace("b","")
    sshpass = sshpass.replace("\'","")
    hermesMapGen.mapUpdate(userName,sshpass,server)
      

return render_template("hermesMap.html")

“hermesMapGen”正在生成一个带有插入参数的叶地图,这是需要每五分钟调用一次的函数,因此地图将具有更新的数据。

这是 HTML:

<!DOCTYPE html>
<html>
{%block content%}
 
  <div class="custom-height-map" style="position:relative;padding-top:42.25%;border-style:solid;border-width:6px;">
  <iframe src="{{url_for('static',filename='sfMarketMap.html')}}" id='hermesmap' frameborder="0" allowfullscreen
      style="position:absolute;top:0;left:0;width:100%;height:100%;"></iframe>
  </div>
  
  <script>
          window.setInterval(function() {
              reloadIFrame()
          }, 300000);
  
          function reloadIFrame() {
              console.log('reloading..');
              document.getElementById('hermesmap').contentWindow.location.reload();
          }
      </script>


{%endblock%}
</html>

有没有一种方法可以在浏览器中打开地图页面时运行生成地图的功能?

预先感谢

更新:到目前为止,我能够找到使用 javascript 的解决方法。我将以下代码放在初始表单页面中,强制它甚至每 x 分钟模拟一次“点击”,但我认为应该有更好/正确的方法来做到这一点。

<script>
    var btn = document.querySelector("[name='lookup']");
//console.log(btn);
setInterval(function(){
btn.click();
},200000);

//Handling of click event
btn.onclick=function(){ 
console.log('clicked');
}

</script>

标签: pythonflask

解决方案


你是在正确的方向。

继续使用setInterval,但这次fetch调用服务器并获取最新数据。

请参阅此处了解获取。


推荐阅读