首先,我正在尝试创建一对一的聊天网页。
在我的聊天页面视图中,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.g
对象的寿命是单个请求,或者就Flask-SocketIO而言是单个事件。您不能使用它来将数据存储在HTTP视图函数中,并且期望Socket.IO事件处理程序中仍然存在该数据。尝试使用request.session
来存储数据。