簡體   English   中英

Flask-Bcrypt運行時錯誤

[英]Flask-Bcrypt Run time error

我正在用FlaskBcrypt完成一個簡單的小用戶登錄。 但是,當嘗試使用存儲在數據庫中的用戶登錄時,我總是遇到運行時錯誤 看起來好像某種loop正在中斷。 由於我對編程還很陌生,因此弄清楚我在做什么錯是非常困難的。 希望這里有人可以幫忙! 我將通過下面的相關代碼:

這是我遇到的問題。 它只是不斷循環直到超過最大值:

  File "C:\\Users\\desktop\\test\\app\\models.py", line 37, in password return self.password File "C:\\Users\\.virtualenvs\\flask\\lib\\site-packages\\sqlalchemy\\ext\\hybrid.py", 

第742行,在get返回self.fget(instance)文件“ C:\\ Users \\ desktop \\ test \\ app \\ models.py”,第37行,密碼

Models.py

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password = db.Column(db.String(100))
    posts = db.relationship('Post', backref='author', lazy='dynamic',
                            primaryjoin="User.id==Post.user_id")
    about_me = db.Column(db.String(140))
    last_seen = db.Column(db.DateTime)
    followed = db.relationship('User',
                                secondary=followers,
                                primaryjoin=(followers.c.follower_id == id),
                                secondaryjoin=(followers.c.followed_id == id),
                                backref=db.backref('followers', lazy='dynamic'),
                                lazy='dynamic')


    @hybrid_property
    def password(self):
        return self.password



    @password.setter
    def set_password(self, plaintext):
        self.password = bcrypt.generate_password_hash(plaintext)

    def is_correct_password(self, plaintext):
        return bcrypt.check_password_hash(self.password, plaintext)

Forms.py

class LoginForm(Form):
    nickname = TextField('Nickname', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])

Views.py登錄

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(nickname=form.nickname.data).first_or_404()
        if user.is_correct_password(form.password.data):
            login_user(user)
            flash("you've been logged in!, 'success'")
            return redirect(url_for('index'))
        else:
            flash('your email or password doesnt match!', 'error')
            return redirect(url_for('login'))
    return render_template('login.html',
                            title='Sign In',
                            form=form)

Views.py注冊

@app.route('/register', methods=('GET', 'POST'))
def register():
    form = forms.RegisterForm()
    if form.validate_on_submit():
        user = User(nickname=form.nickname.data, emai=form.email.data, password=form.password.data)
        db.session.add(user)
        db.session.commit()
        flash('User successfully registered')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

您應該對列和屬性使用不同的名稱

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    password_hash = db.Column(db.String(100))

    @hybrid_property
    def password(self):
        return self.password_hash

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM