在 Flask 中执行耗时函数时显示“正在加载"消息 [英] Display a ‘loading’ message while a time consuming function is executed in Flask
问题描述
我对 Flask 还是比较陌生,一般来说有点网络菜鸟,但到目前为止我已经取得了一些不错的结果.现在我有一个用户输入查询的表单,它被赋予一个函数,该函数可能需要 5 到 30 秒的时间来返回结果(使用 Freebase API 查找数据).
I’m still relatively new to Flask, and a bit of a web noob in general, but I’ve had some good results so far. Right now I’ve got a form in which users enter a query, which is given to a function that can take anywhere between 5 and 30 seconds to return a result (looking up data with the Freebase API).
问题是我不能让用户知道他们的查询在这段时间内正在加载,因为只有在函数完成工作后才会加载结果页面.有什么方法可以在发生加载时显示加载消息?我发现一些 Javascript 可以在页面元素仍在加载时显示加载消息,但我的等待时间发生在render_template"之前.
The problem is that I can’t let the user know that their query is loading during this time, as the results page only loads once the function finishes its work. Is there a way I can display a loading message while that's going on? I found some Javascript that could display a loading message while page elements are still loading, but my waiting period happens before ‘render_template’.
我拼凑了一些示例代码,只是为了演示我的情况:
I knocked together some example code, just to demonstrate my situation:
蟒蛇:
from flask import Flask
from flask import request
from flask import render_template
import time
app = Flask(__name__)
def long_load(typeback):
time.sleep(5) #just simulating the waiting period
return "You typed: %s" % typeback
@app.route('/')
def home():
return render_template("index.html")
@app.route('/', methods=['POST'])
def form(display=None):
query = request.form['anything']
outcome = long_load(query)
return render_template("done.html", display=outcome)
if __name__ == '__main__':
#app.debug = True
app.run()
摘自 index.html:
Excerpt from index.html:
<body>
<h3>Type anything:</h3>
<p>
<form action="." method="POST">
<input type="text" name="anything" placeholder="Type anything here">
<input type="submit" name="anything_submit" value="Submit">
</form>
</p>
</body>
摘自 done.html:
Excerpt from done.html:
<body>
<h3>Results:</h3>
<p>
{{ display }}
</p>
</body>
任何帮助将不胜感激,我希望这个例子有帮助.
Any help would be greatly appreciated, I hope this example helps.
推荐答案
这可以通过使用包含加载 gif"图像的 div
来完成.单击提交按钮时,将使用 javascript 显示 div.要实现这一点,你可以看看这个网站:http://web.archive.org/web/20181023063601/http://www.netavatar.co.in/2011/05/31/how-to-show-a-loading-gif-image-while-a-page-loads-using-javascript-and-css/
This can be done by using a div
that contains a 'loading gif' image. When the submit button is clicked, the div is displayed using javascript.
To implement this, you can take a look at this website: http://web.archive.org/web/20181023063601/http://www.netavatar.co.in/2011/05/31/how-to-show-a-loading-gif-image-while-a-page-loads-using-javascript-and-css/
这篇关于在 Flask 中执行耗时函数时显示“正在加载"消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!