Rumah  >  Soal Jawab  >  teks badan

python - Ralat semasa menggunakan login_user dalam flask-login?

log masuk kelalang digunakan dalam kelalang untuk pengesahan log masuk Berikut ialah model Pengguna:

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

Ini borangnya:

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

Ini ialah fungsi pandangan:

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

Situasi semasa ialah apabila pengguna berjaya mendaftar, dia akan log masuk secara automatik dan melompat ke halaman berikut, tetapi jika dia terus meminta selepas melompat, ralat akan berlaku Jika log masuk dialih keluar semasa pendaftaran, akan berlaku takde masalah.tak tahu kenapa

怪我咯怪我咯2686 hari yang lalu886

membalas semua(1)saya akan balas

  • 曾经蜡笔没有小新

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

    Tiada apabila user_id tidak dapat ditemui, dan ralat berlaku apabila melaksanakan int(user_id)

    Cuba perenggan ini

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

    ditukar kepada

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

    balas
    0
  • Batalbalas