我目前有一个 Flask 网络服务器,它使用内置的请求对象从 JSON API 中提取数据。
例如:
def get_data():
response = requests.get("http://myhost/jsonapi")
...
return response
@main.route("/", methods=["GET"])
def index():
return render_template("index.html", response=response)
这里的问题是 GET 方法自然只运行一次,即第一次调用 get_data 时。为了刷新数据,我必须停止并重新启动 Flask wsgi 服务器。我尝试将代码的各个部分包装在 while True/sleep 循环中,但这会阻止 werkzeug 加载页面。
无需重新加载页面或重新启动服务器即可动态获取所需数据的最 Pythonic 方式是什么?
最佳答案
您正在讨论的可能是两个不同的问题。
假设问题是您只调用动态数据源
get_data()
一次并将其(静态)值保存在全局响应
。这个一次性调用没有显示,但假设它在你的代码中的某个地方。然后,如果您愿意刷新页面 (/
) 以获取更新,那么您可以:@main.route("/", methods=['GET']) def index(): return render_template("index.html", response=get_data())
这会在每次页面加载时获取新数据。
然后在问题的最后,您询问如何“获取我想要的数据而无需重新加载页面或重新启动服务器”。那是一个完全不同的问题。您必须在代码中使用 AJAX 或 WebSocket 请求。您可以通过谷歌搜索“Flask AJAX”找到很多关于如何执行此操作的教程(例如本教程)。但这将需要 JavaScript AJAX 调用。我建议通过搜索“Flask AJAX jQuery”找到如何完成此操作的示例,因为 jQuery 将抽象并简化您需要在客户端执行的操作。或者,如果您希望使用 WebSockets 实现网页之间的低延迟连接,那也是可能的;搜索示例(例如 like this one )。
关于python - 是否可以在服务器端的 Flask 中动态更新呈现的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536187/