flask wtforms_alchemy 对象没有属性
flask wtforms_alchemy object has no attribute
我刚开始做 flask restful api 并尝试通过向 localhost:5000/api/v1/users
发送 POST 请求来注册用户。必填字段是电子邮件和密码。这是创建用户 curl http://localhost:5000/api/v1/users -d "email=admin@example.com&password=password" -X POST -v
的 curl 请求
但是 returns 我这个错误:AttributeError: 'UserCreateForm' object has no attribute 'password'
下面是我的代码片段
views.py
class UserView(restful.Resource):
def post(self):
form = UserCreateForm()
if not form.validate_on_submit():
return form.errors, 422
user = User(email=form.email.data, password=form.password.data)
db.session.add(user)
db.session.commit()
return UserSerializer(user).data
forms.py
BaseModelForm = model_form_factory(Form)
class ModelForm(BaseModelForm):
@classmethod
def get_session(self):
return db.session
class UserCreateForm(ModelForm):
class Meta:
model = User
models.py(我厌倦了将 UserMixin
放在第二位,仍然出现同样的错误)
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
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)
此外,我已经 login_manager.user_loader
包括在内,所以我认为 Flask 登录不会有问题。
是否有 wtform_alchemy 的文档?我完全不明白如何从模型中自动创建表单。
UserCreateForm
将从您在 User
上定义的列继承其字段。 User
没有名为 password
的列,因此 UserCreateForm
没有这样的字段。您必须自己添加该字段。
from wtforms.fields import PasswordField
class UserCreateForm(ModelForm):
class Meta:
model = User
password = PasswordField()
WTForms-Alchemy docs 讨论添加和覆盖字段。
我刚开始做 flask restful api 并尝试通过向 localhost:5000/api/v1/users
发送 POST 请求来注册用户。必填字段是电子邮件和密码。这是创建用户 curl http://localhost:5000/api/v1/users -d "email=admin@example.com&password=password" -X POST -v
但是 returns 我这个错误:AttributeError: 'UserCreateForm' object has no attribute 'password'
下面是我的代码片段
views.py
class UserView(restful.Resource):
def post(self):
form = UserCreateForm()
if not form.validate_on_submit():
return form.errors, 422
user = User(email=form.email.data, password=form.password.data)
db.session.add(user)
db.session.commit()
return UserSerializer(user).data
forms.py
BaseModelForm = model_form_factory(Form)
class ModelForm(BaseModelForm):
@classmethod
def get_session(self):
return db.session
class UserCreateForm(ModelForm):
class Meta:
model = User
models.py(我厌倦了将 UserMixin
放在第二位,仍然出现同样的错误)
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
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)
此外,我已经 login_manager.user_loader
包括在内,所以我认为 Flask 登录不会有问题。
是否有 wtform_alchemy 的文档?我完全不明白如何从模型中自动创建表单。
UserCreateForm
将从您在 User
上定义的列继承其字段。 User
没有名为 password
的列,因此 UserCreateForm
没有这样的字段。您必须自己添加该字段。
from wtforms.fields import PasswordField
class UserCreateForm(ModelForm):
class Meta:
model = User
password = PasswordField()
WTForms-Alchemy docs 讨论添加和覆盖字段。