gpt4 book ai didi

python - Flask_login 中的 current_user 返回 NoneType

转载 作者:行者123 更新时间:2023-12-03 02:23:17 25 4
gpt4 key购买 nike

在我的 forms.py 应用程序中,我有以下几行:

from flask_wtf import FlaskForm
from wtforms import SelectField, StringField, SubmitField, TextAreaField, PasswordField, BooleanField
from wtforms.validators import DataRequired
from flask_login import current_user

class LogForm(FlaskForm):
#game, title, log, submit
game = SelectField(u'Select Game', default='', coerce=str, choices=[(game.game_name, game.game_name) for game in current_user.games])
game.choices = [(game.game_name, game.game_name) for game in current_user.games]
title = StringField('Title', validators=[DataRequired()])
log = TextAreaField('Game log', validators=[DataRequired()])
submit = SubmitField('Update')

class RegisterForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])

class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField("Remember me")
submit = SubmitField("Sign in")

当我运行代码时,出现以下错误:

>>> from app import db
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/AdityaD/iCloud Drive (Archive)/Desktop/flask_devlog/app/__init__.py", line 15, in <module>
from app import routes, models
File "/Users/AdityaD/iCloud Drive (Archive)/Desktop/flask_devlog/app/routes.py", line 7, in <module>
from app.forms import LoginForm, LogForm
File "/Users/AdityaD/iCloud Drive (Archive)/Desktop/flask_devlog/app/forms.py", line 7, in <module>
print(current_user.id)
File "/Users/AdityaD/iCloud Drive (Archive)/Desktop/flask_devlog/env/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: 'NoneType' object has no attribute 'id'

以下是 models.py 文件的相关部分,供引用

from app import db
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import UserMixin
from app import login

@login.user_loader
def load_user(id):
return User.query.get(int(id))

class User(UserMixin, db.Model):
__tablename__ = "User"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64))
hashed_password = db.Column(db.String(128))
games = db.relationship('Game', backref='creator', lazy=True)

def set_password(self, password):
self.hashed_password = generate_password_hash(password)

def check_password(self, password):
return check_password_hash(self.hashed_password, password)

def __repr__(self):
return f'<User {self.username}>'

我尝试将包含类似 if current_user is None 的 if 语句放入 LogForm 表单中,但它仍然不起作用。为什么会出现这种情况?救命!

编辑:在表单语句返回之前添加 is_authenticated 检查 AttributeError: 'NoneType' 对象没有属性 'is_authenticated'

最佳答案

要使flask_login正常工作,您需要确保您的代码具有以下方法,以便flask_login实际上可以根据给定的id登录用户

@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)

此外,为了让您的表单正确生成 game.choices 字段,您需要通过登录用户来确保您拥有 current_user 对象。

为了帮助您调试,请尝试 print(current_user) 如果您得到 AnonymousUser 对象,则表示您的用户未正确登录。

关于python - Flask_login 中的 current_user 返回 NoneType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53348504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com