flask_login中的current_user返回空值Typ

2024-04-20 07:02:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的表单.pyapp,我有以下几行:

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")

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

^{pr2}$

作为参考,以下是模型.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表单,但它仍然不能工作。为什么会这样?救命啊!在

编辑:在form语句返回AttributeError: 'NoneType' object has no attribute 'is_authenticated'之前添加is_身份验证检查


Tags: namefromimportselfgamedbloginpassword
1条回答
网友
1楼 · 发布于 2024-04-20 07:02:53

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

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

此外,要使表单正确生成game.choices字段,您需要通过登录用户来确保拥有当前的用户对象。在

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

相关问题 更多 >