Heim  >  Fragen und Antworten  >  Hauptteil

python – Fehler bei Verwendung von login_user in flask-login?

flask-login wird in flask zur Anmeldeüberprüfung verwendet. Das Folgende ist das Benutzermodell:

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

Das ist das Formular:

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

Dies ist die Ansichtsfunktion:

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

Die aktuelle Situation ist, dass sich der Benutzer bei erfolgreicher Registrierung automatisch anmeldet und zur nächsten Seite springt. Wenn er jedoch nach dem Sprung weiterhin anfragt, tritt ein Fehler auf. Wenn die Anmeldung während der Registrierung entfernt wird, tritt ein Fehler auf Kein Problem. Ich weiß nicht warum

怪我咯怪我咯2709 Tage vor920

Antworte allen(1)Ich werde antworten

  • 曾经蜡笔没有小新

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

    user_id找不到時為None,執行int(user_id)發生錯誤

    試著把這段

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

    改成

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

    Antwort
    0
  • StornierenAntwort