python - guia - texto/secuencia de eventos reconocida como descarga
qgis manual (1)
EDITAR
He subido mi aplicación de muestra a mi Github. Compruébelo aquí: https://github.com/djdmorrison/flask-progress-example
Lo he resuelto, pero para cualquier otra persona que tenga el mismo problema:
La página index.hmtl nunca se carga realmente, ya que nunca se llama en app.py. La forma de hacerlo es yendo a una ruta separada, / página por ejemplo, y luego devolviendo send_file(''index/html'')
. Esto cargará la página de índice, creará el EventSource vinculado a / stream, que luego iniciará el método de transmisión en app.py y arrojará los datos correctos.
Ejemplo que crea una barra de progreso al aumentar x
cada 0,2 segundos y mostrarlo en la página web:
app.py
@app.route(''/page'')
def get_page():
return send_file(''templates/progress.html'')
@app.route(''/progress'')
def progress():
def generate():
x = 0
while x < 100:
print x
x = x + 10
time.sleep(0.2)
yield "data:" + str(x) + "/n/n"
return Response(generate(), mimetype= ''text/event-stream'')
progress.html
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script>
var source = new EventSource("/progress");
source.onmessage = function(event) {
$(''.progress-bar'').css(''width'', event.data+''%'').attr(''aria-valuenow'', event.data);
}
</script>
</head>
<body>
<div class="progress" style="width: 50%; margin: 50px;">
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
</div>
</div>
</body>
</html>
Estoy intentando implementar el empuje del servidor en mi proyecto Flask siguiendo este tutorial .
Lo configuré todo sin errores, sin embargo, cuando voy a la página / stream, Firefox lo reconoce como un archivo e intenta descargarlo. En Safari solo imprime los datos enviados. Traté de adaptar el código a una implementación más simple, donde un hilo solo produce algunos datos cada segundo, sin embargo, produjo los mismos resultados.
Mi objetivo es que cada vez que un script de Python llegue a un punto en un bucle, actualice una barra de progreso en la interfaz web.
Cualquier ayuda con esto sería genial. Gracias.
Editar:
app.py
from flask import Flask, render_template, request, Response
app = Flask(__name__)
def event_stream():
event = "Hello!"
yield ''data: %s/n/n'' % event
@app.route(''/stream'')
def stream():
return Response(event_stream(), mimetype="text/event-stream")
if __name__ == "__main__":
app.debug = True
app.run(threaded=True)
index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
var source = new EventSource(''/stream'');
source.onmessage = function (event) {
alert(event.data);
};
</script>
</head>
<body>
<p>Stream page</p>
</body>
</html>