¿Es posible actualizar dinámicamente una plantilla renderizada en Flask, en el lado del servidor?

Actualmente tengo un servidor web Flask que extrae datos de una API JSON utilizando el objeto de solicitudes incorporado.

Por ejemplo:

def get_data(): response = requests.get("http://myhost/jsonapi") ... return response @main.route("/", methods=["GET"]) def index(): return render_template("index.html", response=response) 

El problema aquí es que, naturalmente, el método GET solo se ejecuta una vez, la primera vez que se llama get_data. Para actualizar los datos, tengo que detener y reiniciar el servidor Flask wsgi. He intentado envolver varias partes del código al mismo tiempo en True / sleep loop pero esto evita que werkzeug cargue la página.

¿Cuál es la forma más Pythonic de obtener dinámicamente los datos que quiero sin tener que volver a cargar la página o reiniciar el servidor?

Estás discutiendo cuáles son quizás dos temas diferentes.

  1. Supongamos que el problema es que está llamando al origen de datos dynamic, get_data() , solo una vez y que mantiene su valor (estático) en una response global. Esta llamada de una sola vez no se muestra, pero digamos que está en algún lugar de su código. Luego, si está dispuesto a actualizar la página ( / ) para obtener actualizaciones, entonces podría:

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

    Esto obtendría datos nuevos en cada carga de página.

  2. Luego, hacia el final de la pregunta, pregunta cómo “OBTENER los datos que quiero sin tener que volver a cargar la página o reiniciar el servidor”. Ese es un tema completamente diferente. Tendrá que usar solicitudes AJAX o WebSocket en su código. Hay bastantes tutoriales sobre cómo hacer esto (por ejemplo, este ) que puede encontrar en Google “Flask AJAX”. Pero esto requerirá una llamada de JavaScript AJAX. Recomiendo encontrar ejemplos de cómo se hace esto mediante la búsqueda de “Flask AJAX jQuery” ya que jQuery abstraerá y simplificará lo que necesita hacer en el lado del cliente. O, si desea utilizar WebSockets para una conexión de menor latencia entre su página web, también es posible; buscar ejemplos (por ejemplo, como este ).