我正在烧瓶中创建一个聊天应用程序并做出反应。在反应中,我调用登录请求,并在成功返回后显示聊天页面,该页面询问用户当前加入的当前用户房间。但在 Flask 中,我收到此错误。
192.168.100.9 - - [25/Dec/2023 17:01:55] "POST /get_rooms HTTP/1.1" 500 -
Traceback (most recent call last):
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 1478, in __call__
return self.wsgi_app(environ, start_response)
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask_socketio\__init__.py", line 43, in __call__
return super(_SocketIOMiddleware, self).__call__(environ,
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\engineio\middleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 1458, in wsgi_app
response = self.handle_exception(e)
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 1455, in wsgi_app
response = self.full_dispatch_request()
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 869, in full_dispatch_request
rv = self.handle_user_exception(e)
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 867, in full_dispatch_request
rv = self.dispatch_request()
File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 852, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "D:\PythonSTUFF\Python-flask-chat-app\routes.py", line 196, in get_rooms
rooms = User.query.filter_by(username=current_user.username).first().rooms
AttributeError: 'AnonymousUserMixin' object has no attribute 'username'
在登录函数中,我使用flask_login.login_user()来登录用户。
@main.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
username = request.get_json()['username']
password = request.get_json()['password']
user = User.query.filter_by(username=username).first()
if user is not None and user.verify_password(password):
login_user(user)
return jsonify({"status": "success"}), 200
else:
error = "Incorrect username or password"
else:
error = "Incorrect username or password"
return jsonify({"status": "error", "message": error}), 500
成功返回后,调用获取房间的请求,但出现错误。
@login_required
@main.route('/get_rooms', methods=['GET', 'POST'])
def get_rooms():
rooms = User.query.filter_by(username=current_user.username).first().rooms
rooms_data = []
for room in rooms:
rooms_data.append({'room_code': room.room_code, 'room_name': room.room_name, 'last_message': room.last_message, 'last_message_user': room.last_messsage_user, 'admin': room.admin})
return jsonify({"status": "success", "rooms": rooms_data}), 200
这应该返回当前用户的房间。
不完全了解错误,但是,您是否确切知道错误发生在哪里、在哪一行。测试 get_json() 方法返回您想要的正确数据的一件事。因为错误“AttributeError: 'AnonymousUserMixin' object has no attribute 'username'”表明没有名为 'username' 的属性,可能在该 json 中找不到 'username' 键。检查一下。我认为的一件事是,请求中的数据未正确发送,或者无法从请求中提取数据。按照文档了解获取json数据的函数或者再次检查你的请求,可能是请求方法导致了错误。