python – Fehler bei Verwendung von login_user in flask-login?
怪我咯
怪我咯 2017-06-12 09:25:19
0
1
865

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

怪我咯
怪我咯

走同样的路,发现不同的人生

Antworte allen(1)
曾经蜡笔没有小新

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) 
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!