flask - SQLAlchemy:我可以在作为 declarative_base 类的用户类中散列密码吗?
问题描述
我有用户类:
engine = create_engine('mysql://root:@localhost/academic', convert_unicode=True, echo=False)
Base = declarative_base()
Base.metadata.reflect(engine)
class User(Base):
__table__ = Base.metadata.tables['user']
@property
def password(self):
raise AttributeError('password is not a readable attribute')
@password.setter
def password(self, password):
self.password = generate_password_hash(password)
def verify_password(self, password):
return check_password_hash(self.password, password)
该代码在没有密码方法的情况下可以正常工作,但是一旦我取消注释它们,页面就会继续加载并且没有来自服务器的响应。
解决方案
你在self.password
里面设置@password.setter
,导致无限递归。取一个私有字段_password
,并使其与数据写入和读取的位置相对应:
class User(Base):
__table__ = Base.metadata.tables['user']
_password = Column("password", String(256), nullable=False)
@property
def password(self):
raise AttributeError('password is not a readable attribute')
@password.setter
def password(self, password):
self._password = generate_password_hash(password)
def verify_password(self, password):
return check_password_hash(self._password, password)
推荐阅读
- postgresql - postgresql / postgres 授予对当前架构中所有内容的权限
- mysql - 无法启动我的 Docker 容器。来自守护进程的错误响应:创建覆盖挂载时出错
- json - 将 Scala 值作为 Json 字符串返回
- database - 关于从现有来源获取数据的文章
- typescript - 如何测试使用 MikroORM 构建的 express rest api?
- ios - 在子视图中更新 EnvironmentObject 会导致视图弹出
- html - VBA,FindelementbyXpath,NoSuchElementError,当我复制和粘贴 xpath 时,我的代码运行良好。但是,当再次播放我的代码时,错误..为什么?
- c# - WPF C#托盘图标实现问题
- javascript - 如何通过正则表达式匹配或捕获给定字符串中的特定子字符串模式?
- python - 将实例方法结果传递给类属性