首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶会话和表单:点击聊天页面按钮时显示用户用户名的问题

烧瓶会话和表单:点击聊天页面按钮时显示用户用户名的问题
EN

Stack Overflow用户
提问于 2022-01-14 10:34:04
回答 1查看 118关注 0票数 -1

我是一个初学者程序员工作在一个简单的聊天应用程序在烧瓶使用socketio。当用户在登录页面上提交表单时,它们被重定向到聊天页面,其中消息"hello username“向他们致意。但是,当他们单击聊天页面上的任何其他按钮时,页面会刷新并显示"hello none“。我认为这个问题源于我实现的烧瓶会话:当用户启动会话,然后刷新只有POST请求才能访问的聊天页面时,就好像他们在登录时没有传递任何信息,这就是为什么聊天页面刷新为"hello {None}“。

但是,我不知道如何解决这个问题。我希望用户的用户名被保存和显示,即使他们刷新聊天页面。我是否需要将用户名保存在数据库中以实现这一点,还是可以以另一种方式修复?下面是后端:

代码语言:javascript
复制
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)

以下是登录页面的相关前端:

代码语言:javascript
复制
        <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>

下面是聊天页面的相关前端。

代码语言:javascript
复制
                <h1> Hello {{Uname}}! </h1>
            </div>
EN

回答 1

Stack Overflow用户

发布于 2022-01-14 13:31:34

对我有用的解决方案是将以下代码行添加到python文件中:

代码语言:javascript
复制
from flask_session import Session 

代码语言:javascript
复制
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70709232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档