我正在用python烧瓶设计一个web应用程序,处理流程如下:
我不知道如何通知“完成”状态的前端,以便刷新页面。
有人能帮我吗?谢谢
发布于 2018-11-18 14:07:10
使用烧瓶-socketio可能会满足您的要求。它在前端和后端之间建立了一个连接,它允许后端发出消息,并且前端注册了一个回调,当它接收到事件时会触发回调。
$ pip install flask-socketio
app.py
import json
import time
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def hello(name=None):
return render_template('index.html')
@socketio.on('long-running-event')
def handle_my_custom_event(input_json):
time.sleep(5)
emit('processing-finished', json.dumps({'data': 'finished processing!'}))
if __name__ == '__main__':
socketio.run(app)
模板/index.html
<html>
<body>
<button id="long-running-operation">Process data</button>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
let button = document.getElementById('long-running-operation');
button.addEventListener('click', () => {
socket.emit('long-running-event', {data: 'process data'});
});
socket.on('processing-finished', function (data) {
alert(JSON.parse(data).data)
});
</script>
</body>
</html>
然后用python app.py
运行这个应用程序。访问http://127.0.0.1:5000/
浏览器中的应用程序并单击按钮。该按钮将发送'long-running-event'
请求烧瓶和烧瓶处理它的睡眠5秒,以模拟一个长时间运行的过程。然后,烧瓶发出'processing-finished
消息,javascript通过通知烧瓶发送的消息,触发注册为侦听该事件的回调。
https://stackoverflow.com/questions/53360968
复制相似问题