У меня проблемы с добавлением частных комнат в этот учебник: https://codeburst.io/building-your-first-chat-application-using-flask-in-7-minutes-f98de4adfa5d
Я также использую Flask-Login для создания пользовательских профилей входа.Я сузил самое простое решение для создания комнаты для пользователей, чтобы присоединиться с помощью join_room ().Я пытался внедрить это в свой код, но я должен делать что-то не так, потому что ничего не работает.Вот мой код:
Python:
@app.route('/message/<string:chat_id>/', methods=['GET', 'POST'])
@login_required
def message(chat_id):
return render_template('message.html', currentuser = \
str(current_user.username), chatid = chat_id)
def messageReceived(methods=['GET', 'POST']):
print('message was received!!!')
@socketio.on('join')
def on_join(data):
username = data['username']
room = data['room']
join_room(room)
send(username + ' has entered the room.', room=room)
@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']):
print('received my event: ' + str(json))
socketio.emit('my response', json, callback=messageReceived)
HTML:
<form action="" method="POST">
<input type="text" class="message" placeholder="Messages"/>
<input type="submit"/>
</form>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script type="text/javascript">
var user_name = "{{currentuser}}"
var socket = io.connect();
socket.emit('join', {
username : '{{currentuser}}',
room : '{{chatid}}'
})
socket.on( 'connect', function(socketio) {
socket.emit( 'my event', {
data: 'User Connected'
} )
var form = $( 'form' ).on( 'submit', function( e ) {
e.preventDefault()
let user_input = $( 'input.message' ).val()
socket.emit( 'my event', {
user_name : user_name,
message : user_input
} )
$( 'input.message' ).val( '' ).focus()
} )
} )
socket.on( 'my response', function( msg ) {
console.log( msg )
if( typeof msg.user_name !== 'undefined' ) {
$( 'h3' ).remove()
$( 'div.message_holder' ).append( '<div><b>'+msg.user_name+'</b> '+msg.message+'</div>' )
}
})
</script>
При запуске этогоКод на localhost в двух отдельных браузерах, оба пользователя могут видеть сообщения.Используя функции печати, я убедился, что переменная помещения, объявленная в функции @ socketio.on ('join'), различна для двух пользователей.При запуске кода не выдается никаких ошибок.Любая помощь или указание мне в правильном направлении будет очень признателен!