很长一段时间以来,我一直在努力解决代码中的问题,我似乎无法弄清楚我在做什么/出了什么问题。
所以基本上我正在用flask和socket.io制作一个聊天应用程序。我想使用烧瓶会话来保存数据,但我的数据似乎没有保存。
import os
from flask import Flask, render_template, request, session, redirect
from flask_socketio import SocketIO, emit
from flask_session import Session
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
socketio = SocketIO(app, manage_session=False)
Session(app)
users = []
chatrooms = []
@app.route("/", methods=["GET","POST"])
def index():
if request.method == "POST":
displayname = request.form.get("dname")
for user in users:
if displayname == user:
return render_template("index.html", error_message = "Displayname is already taken.")
session['displayname'] = displayname
session["logged_in"] = True
return render_template("main.html", displayname=displayname, chatrooms=chatrooms, users=users)
if request.method == "GET":
if 'displayname' in session:
displayname = session['displayname']
return redirect("/main")
return render_template("index.html")
@app.route("/main", methods=["GET", "POST"])
def main():
if request.method == "GET":
displayname = request.form.get("goback")
session['displayname'] = displayname
if displayname in users:
users.remove(displayname)
if 'chatroomname' in session:
chatroomname = session['chatroomname']
return redirect("/getchatroom")
return render_template("main.html", displayname=displayname, chatrooms=chatrooms, users=users)
if request.method == "POST":
displayname = request.form.get("makechatroom")
session['displayname'] = displayname
chatroomname = request.form.get("chatroomname")
for chatroom in chatrooms:
if chatroom == chatroomname:
error= "This chatroom already exists! Choose another name!"
return render_template("main.html", displayname=displayname, chatrooms=chatrooms, users=users, error=error)
chatrooms.append(chatroomname)
session['chatroomname'] = chatroomname
users.append(displayname)
return render_template("chatroom.html", displayname=displayname, chatroomname=chatroomname, users=users)
@app.route("/getchatroom", methods=["POST"])
def getchatroom():
if request.method == "POST":
chatroomname = request.form.get("openchatroom")
session['chatroomname'] = chatroomname
displayname = request.form.get("disname")
session['displayname'] = displayname
users.append(displayname)
return render_template("chatroom.html", displayname=displayname, chatroomname=chatroomname, users=users)
@app.route("/logout", methods=["GET"])
def logout():
displayname = request.form.get("logout")
if displayname in users:
users.remove(displayname)
session.pop('username', None)
session["logged_in"] = False
return redirect("/")
我真的不知道 HTML 是否相关,因为它似乎与 HTML 无关。
这是我的错误信息:
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask_socketio\__init__.py", line 45, in __call__
return super(_SocketIOMiddleware, self).__call__(environ,
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\engineio\middleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\linda\OneDrive\Bureaublad\project2\application.py", line 47, in main
displayname = session['displayname']
File "C:\Users\linda\OneDrive\Bureaublad\project2\venv\Lib\site-packages\werkzeug\local.py", line 377, in <lambda>
__getitem__ = lambda x, i: x._get_current_object()[i]
KeyError: 'displayname'
提前感谢所有试图提供帮助的人!
xx琳达