【问题标题】:Flask-Socketio Session returning last valueFlask-Socketio 会话返回最后一个值
【发布时间】:2021-12-14 16:16:24
【问题描述】:

服务器端

@app.route('/login',methods=['GET','POST'])
def login():        
    if request.method == 'POST':
        if Users.is_user(request.form['username'],request.form['password']):
            name = Users.get_name(request.form['username'])
            session['name'] = name
            return redirect(url_for('home'))
        else:
            return redirect(url_for('login'))   
return render_template("login.html",**{'session':session})

@app.route('/get_name',methods=['GET'])
def get_name():
    data = {'name' : ''}
    if NAME_KEY in session:
        data = {'name':session['name']}
    return jsonify(data)

客户端

async function get_Name(){
    return fetch("/get_name")
    .then(function (response) {
        return  response.json();   
      })
      .then(function (text) {
        return text["name"];
      });
}
   socket.on('message', async function(msg) {
   let user_name =  await get_Name();
   $("#messages").append('<li>'+user_name+':'+msg+'</li>');
   console.log('Received message');
  });
});

当最后一个用户登录时,所有用户的用户名都会更改为最后一个用户名。但在日志中,我可以看到 session['name'] 是特定于登录用户的。

【问题讨论】:

    标签: flask session flask-sqlalchemy flask-socketio


    【解决方案1】:
    $('#sendbutton').on('click', async function() {
    var user_name =  await get_Name();
    var msg = $('#myMessage').val()
    var data = {
        'name': user_name,
        'msg' : msg
    };
    socket.emit('message',data);
    $('#myMessage').val('');
    });
    

    我使用 emit 发送包含发送消息的用户名称的数据,然后通过 python 中的 emit 函数再次将其发送到 javascript。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-12
      • 2021-07-12
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多