是否可以在Flask,服务器端动态更新渲染模板?

时间:2014-10-23 19:46:44

标签: python json flask

我目前有一个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方法是什么,而无需重新加载页面或重新启动服务器?

1 个答案:

答案 0 :(得分:17)

您正在讨论可能存在的两个不同问题。

  1. 让我们假设问题是您只调用动态数据源get_data()一次,并将其(静态)值保留在全局response中。这个一次性通话没有显示,但让我们说它在你的代码中的某个地方。然后,如果您愿意刷新页面(/)以获取更新,则可以:

    @main.route("/", methods=['GET'])
    def index():
        return render_template("index.html", response=get_data())
    

    这会在每次加载页面时获取新数据。

  2. 然后在问题的最后,您询问如何获取我想要的数据,而无需重新加载页面或重新启动服务器。"这是一个完全不同的问题。您必须在代码中使用AJAX或WebSocket请求。有很多关于如何执行此操作的教程(例如this one),您可以通过Google搜索" Flask AJAX找到。"但这需要JavaScript AJAX调用。我建议通过搜索" Flask AJAX jQuery"来查找如何完成此操作的示例。因为jQuery将抽象和简化你在客户端需要做的事情。或者,如果您希望使用WebSockets在网页之间实现低延迟连接,这也是可能的;搜索示例(例如like this one)。