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
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
changé en