我在__init__.py中创建了一个应用程序如下:
from flask_bcrypt import Bcrypt
app = Flask(__name__, static_folder='static')
bcrypt = Bcrypt(app)我在创建数据库模型时使用这个app实例,如下所示:
from sqlalchemy.ext.hybrid import hybrid_property
from app import bcrypt, db
class User(db.Model):
name = db.Column(db.String, nullable=False)
_password = db.Column(db.String)
@hybrid_property
def password(self) -> str:
return self._password
@password.setter
def _set_password(self, password: str):
self._password = bcrypt.generate_password_hash(password)我试图创建一个实例,如下所示(这是我想要做的方法,因为它看起来更干净):
user = User(name='foo', password='bar')但是,当我将它提交到数据库时,我会得到以下错误:AttributeError:无法设置属性。如果我使用:
user = User(name='foo', _password='bar')我想我没有正确地使用@hybrid_property装饰器?如果可能的话,我想使用user = User(name='foo', password='bar')语法。
谢谢你的帮忙。
发布于 2020-08-15 10:57:19
无论是使用@hybrid_property装饰器还是使用本机python对象的@property装饰器,都必须保留用于setter或getter方法的属性定义中使用的相同属性名。
在这里,在您的例子中,def _set_password()应该是def password()。您的代码应该如下所示:
@hybrid_property
def password(self):
return self._password_hash
@password.setter
def password(self, plaintext):
self._password_hash = generate_password_hash(plaintext) https://stackoverflow.com/questions/62249208
复制相似问题