无法在Flask套接字IO中访问应用程序上下文

问题描述 投票:0回答:1

首先,我正在尝试创建一对一的聊天网页。

在我的聊天页面视图中,URL包含我要与之聊天的人的用户名,即“ http://domain.tld/chat/”,我想将此用户名传递给套接字处理程序,因此我可以将用户名用作房间名称,并将其传递给我的发射和发送功能。

所以我为g变量创建了一个新属性,并在我的聊天视图路由中为其分配了用户名,并尝试从套接字处理程序访问它,但这会引发错误。

很显然,我可以做到这一点,因为正如我在文档中看到的那样,可以使用应用程序上下文。这是正确的方法还是我做错了什么。

任何帮助将不胜感激

这是错误,顺便说一句

AttributeError: '_AppCtxGlobals' object has no attribute 'current_chat'

我的视图功能

@bp.route('/chat/<username>')
@login_required
def chat(username):
    user = User.query.filter_by(username=username).first_or_404()
    g.current_chat = username
    return render_template('chat.html', user=user)

我的套接字处理程序

@socketio.on('message')
def handleMessage(msg):
    print('Message: ' + msg)
    socketio.send(msg, room=g.current_chat, include_self=True)
flask flask-socketio
1个回答
0
投票
flask.g对象的寿命是单个请求,或者就Flask-SocketIO而言是单个事件。您不能使用它来将数据存储在HTTP视图函数中,并且期望Socket.IO事件处理程序中仍然存在该数据。

尝试使用request.session来存储数据。

© www.soinside.com 2019 - 2024. All rights reserved.