小编典典

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

python

我目前有一个Flask Web服务器,它使用内置的requests对象从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加载页面。

动态地获取我想要的数据而无需重新加载页面或重新启动服务器的最Python方式是什么?


阅读 212

收藏
2021-01-20

共1个答案

小编典典

您正在讨论什么可能是两个不同的问题。

  1. 假设问题在于您get_data()仅调用一次动态数据源,并将其(静态)值保留在global中response。不会显示此一次调用,但可以说它在代码中的某个位置。然后,如果您愿意刷新页面(/)以获取更新,则可以:
    @main.route("/", methods=['GET'])
    

    def index():
    return render_template(“index.html”, response=get_data())

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

  1. 然后,在问题结尾处,您将询问如何“无需重新加载页面或重新启动服务器即可获取所需的数据”。那是一个完全不同的问题。您将必须在代码中使用AJAX或WebSocket请求。您可以通过谷歌搜索“ Flask AJAX”找到很多有关如何执行此操作的教程(例如,本教程)。但这需要JavaScript AJAX调用。我建议通过搜索“ Flask AJAX jQuery”查找有关如何完成此操作的示例,因为jQuery将抽象化并简化您需要在客户端执行的操作。或者,如果您希望将WebSockets用于网页之间的低延迟连接,那也是可能的;搜索示例(例如这样的示例)。
2021-01-20