我是一个初学者程序员工作在一个简单的聊天应用程序在烧瓶使用socketio。当用户在登录页面上提交表单时,它们被重定向到聊天页面,其中消息"hello username“向他们致意。但是,当他们单击聊天页面上的任何其他按钮时,页面会刷新并显示"hello none“。我认为这个问题源于我实现的烧瓶会话:当用户启动会话,然后刷新只有POST请求才能访问的聊天页面时,就好像他们在登录时没有传递任何信息,这就是为什么聊天页面刷新为"hello {None}“。
但是,我不知道如何解决这个问题。我希望用户的用户名被保存和显示,即使他们刷新聊天页面。我是否需要将用户名保存在数据库中以实现这一点,还是可以以另一种方式修复?下面是后端:
from flask import Flask, render_template, request, flash, session, redirect
from flask_socketio import SocketIO, send, emit
app = Flask(__name__)
app.static_folder = "static"
app.secret_key = "My_secret_key"
app.config["SECRET KEY"] = "another_secret!"
socketio = SocketIO(app)
@app.route('/')
def login_form():
return render_template('index.html')
@app.route('/chat-page', methods=["POST"])
def chat_page():
username = request.form.get("user_name")
session["user"] = username
return render_template('chat-page.html', Uname=username)
@app.route("/logout")
def logout():
session.pop("user", None)
flash("You have been logged out!")
return redirect("/")
# function to send messages to the entire group
@socketio.on("message")
def handle_message(msg):
print("message: " + msg)
send(msg, broadcast=True)
if __name__ == "__main__":
socketio.run(app)以下是登录页面的相关前端:
<form action="/chat-page" class="custom-centered" method="POST">
<!-- styling the form -->
<div class="d-inline-flex p-2">
<div class="input-group flex-nowrap">
<span class="input-group-text" id="addon-wrapping">@</span>
<input type="text" class="form-control" placeholder=" Enter a Username" name="user_name" aria-label="Username" aria-describedby="addon-wrapping" required>
</div>
</div>
<!-- end of styling the form -->
<button type="submit" class="btn btn-primary">Login!</button>
</form>下面是聊天页面的相关前端。
<h1> Hello {{Uname}}! </h1>
</div>发布于 2022-01-14 13:31:34
对我有用的解决方案是将以下代码行添加到python文件中:
from flask_session import Session 和
app.config["SESSION_TYPE"] = "filesystem"
Session(app)https://stackoverflow.com/questions/70709232
复制相似问题