簡體   English   中英

使用 SQLAlchemy 的 hybrid_property 時,Flask 找不到“密碼”字段

[英]Flask can't find 'password' field when using SQLAlchemy's hybrid_property

我正在學習 Flask,我正在嘗試exploreflask 教程 我的注冊表不起作用。 錯誤在server.py 中並說:

password = form.password.data

TypeError: __init__() got an unexpected keyword argument 'password'

我正在使用 Flask-SQLAlchemy 的declarative_base ,所以我相信hybrid_property上的hybrid_property應該可以正常工作,但事實並非如此!

模型.py:

from flask.ext.login import UserMixin
from flask.ext.bcrypt import Bcrypt
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy import Column, Integer, String
from database import Base

# Base is using Flask-SqlAlchemy's declarative_base()
class User(Base, UserMixin):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    email = Column(String(120), unique=True)
    _password = Column(String(120))

    def __init__(self, name=None, email=None):
        self.email = email

    def __repr__(self):
        return '<User %r>' % (self.name)

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

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

    def verify_password(self, plaintext):
        return bcrypt.check_password_hash(self._password, plaintext)

表格.py:

from flask_wtf import Form
from wtforms import StringField, PasswordField
from wtforms.fields.html5 import EmailField
from wtforms.validators import InputRequired

class RegisterForm(Form):
    email = EmailField('email', validators=[InputRequired()])
    password = PasswordField('password', validators=[InputRequired()])

服務器.py:

@app.route('/register', methods=["GET", "POST"])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        user = User(
            email = form.email.data,
            password = form.password.data
        )

        db_session.add(user)
        db_session.commit()
        return redirect(url_for('login.html'))
    return render_template('register.html', form=form)

我不確定出了什么問題?

在 server.py 中,您正在使用電子郵件和密碼初始化 User 實例。 但是,您的 User 類構造函數只接受參數 name 和 email。

所以你應該改變你的構造函數,它也接受密碼。

def __init__(self, name=None, email=None, password=None)
    #your constructor logic

暫無
暫無

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

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