我目前有一个Flask Web服务器,它使用内置的请求对象从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服务器。我尝试在一段时间的True / sleep循环中包装代码的各个部分,但这会阻止werkzeug加载页面。
动态获取我想要的数据的最Pythonic方法是什么,而无需重新加载页面或重新启动服务器?
答案 0 :(得分:17)
您正在讨论可能存在的两个不同问题。
让我们假设问题是您只调用动态数据源get_data()
一次,并将其(静态)值保留在全局response
中。这个一次性通话没有显示,但让我们说它在你的代码中的某个地方。然后,如果您愿意刷新页面(/
)以获取更新,则可以:
@main.route("/", methods=['GET'])
def index():
return render_template("index.html", response=get_data())
这会在每次加载页面时获取新数据。
然后在问题的最后,您询问如何获取我想要的数据,而无需重新加载页面或重新启动服务器。"这是一个完全不同的问题。您必须在代码中使用AJAX或WebSocket请求。有很多关于如何执行此操作的教程(例如this one),您可以通过Google搜索" Flask AJAX找到。"但这需要JavaScript AJAX调用。我建议通过搜索" Flask AJAX jQuery"来查找如何完成此操作的示例。因为jQuery将抽象和简化你在客户端需要做的事情。或者,如果您希望使用WebSockets在网页之间实现低延迟连接,这也是可能的;搜索示例(例如like this one)。