Не удается получить доступ к контексту приложения в Flask Socket IO - PullRequest
0 голосов
/ 27 апреля 2020

Прежде всего, я пытаюсь создать веб-страницу чата 1 на 1.

В моем представлении страницы чата URL содержит имя пользователя, с которым я хочу пообщаться, это "http://domain.tld/chat/ ", я хочу передать это имя пользователя обработчику сокета, чтобы я мог использовать имя пользователя в качестве имени комнаты и передать его моим функциям emit и send.

Итак, я создал новый атрибут для данной переменной и присвоил ему имя пользователя в моем маршруте просмотра чата и попытался получить к нему доступ из обработчика сокетов, но возникает ошибка.

Очевидно, я должен быть в состоянии сделать это, так как контекст приложения сделан доступным для него, как я вижу в документации. Это правильный путь или я делаю что-то не так.

Любая помощь будет высоко ценится

Это ошибка между прочим

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)

1 Ответ

0 голосов
/ 27 апреля 2020

Жизнь объекта flask.g - это один запрос, а в случае Flask -SocketIO - одно событие. Вы не можете использовать его для хранения данных в функции просмотра HTTP и ожидать, что данные все еще будут там в обработчике событий Socket.IO.

Попробуйте использовать request.session для хранения ваших данных.

...