Maison  >  Questions et réponses  >  le corps du texte

python - Erreur lors de l'utilisation de login_user dans flask-login?

flask-login est utilisé dans flask pour la vérification de la connexion. Voici le modèle utilisateur :

class User(db.Model, UserMixin):
    id = db.Column(db.INTEGER, primary_key=True)
    name = db.Column(db.String(64))
    email = db.Column(db.String(64))
    password_hash = db.Column(db.String(128))

    @property
    def password(self):
        raise AttributeError('password is not a readable attribute')

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<User %r>' % self.name


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

Voici le formulaire :

class RegisterForm(FlaskForm):
    email = StringField('Email', validators=[Required(), Length(1, 64), Email()])
    username = StringField('Username', validators=[Required(), Length(1, 16), Regexp('^[A-Za-z][1-9]*$',
                                                                                     message='first is a string and the second must be a int')])
    password = PasswordField('Password', validators=[Required(), Length(1, 64)])
    password2 = PasswordField('Config Password', validators=[Required(), Length(1, 64)])
    submit = SubmitField('Register')

    def validata_email(self, field):
        if User.query.filter_by(email=field.data).first():
            raise ValidationError('Email is already register')

    def validata_username(self, field):
        if User.query_by(username=field.data).first():
            raise ValidationError('User is already in use')

Voici la fonction d'affichage :

@auth.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        user = User(name=form.username.data, email=form.email.data, password=form.password.data)
        db.session.add(user)
        login_user(user, True)
        flash('Register successful!!')
        return render_template('user.html')
    return render_template('register.html', form=form)

La situation actuelle est que lorsque l'utilisateur s'inscrit avec succès, il se connectera automatiquement et passera à la page suivante, mais s'il continue à demander après le saut, une erreur se produira si la connexion est supprimée lors de l'inscription, il y aura. pas de problème. je ne sais pas pourquoi

怪我咯怪我咯2686 Il y a quelques jours888

répondre à tous(1)je répondrai

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-12 09:27:19

    Il vaut None lorsque user_id est introuvable et qu'une erreur se produit lors de l'exécution de int(user_id)

    Essayez ce paragraphe

    def load_user(user_id):
        return User.query.get(int(user_id))
    

    changé en

    def load_user(user_id):
        try: 
            output = User.query.get(int(user_id))
            return(output)
        except:
            return(None) 
    

    répondre
    0
  • Annulerrépondre