其他分享
首页 > 其他分享> > 在Flask中使用socketio.on()渲染新模板

在Flask中使用socketio.on()渲染新模板

作者:互联网

我正在尝试按照以下方式做一些事情:

from flask import Flask, render_template, redirect, url_for
from flask.ext.socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app)

@app.route('/start')
def start():
    return render_template('start.html')

@app.route('/new_view')
def new_view():
    return render_template('new_view.html')

@socketio.on('change_view')
def change_view(message):
    return redirect(url_for('new_view'))

if __name__ == "__main__":
    socketio.run(app, host='127.0.0.1', port=8080)

基本上,如果它从客户端获取“ change_view”消息,我希望它重定向.现在,当我单击触发socket.emit(‘change_view’,message)调用的按钮后,它进入了change_view()函数,因此该部分可以正常工作.它只是根本不重定向或完全不进入new_view()函数(即,如果我在new_view()中放置打印语句,则不会打印).但这也没有给我任何错误.我是套接字的新手,所以我猜正在发生一些基本的误解.

解决方法:

是的,socket.io不能那样工作.您可以发送一条消息,告诉客户端加载新页面.

emit('redirect', {'url': url_for('new_view')})

然后在您的客户中:

socket.on('redirect', function (data) {
    window.location = data.url;
});

但是尚不清楚为什么在此特定示例中根本需要使用服务器.

标签:socket-io,flask,python
来源: https://codeday.me/bug/20191029/1960621.html