所以我正在用水瓶开发一个网络应用程序。在我的数据模型中,我遵循了一个命名约定,但是这个约定似乎不能很好地集成到用于特定字段命名(例如来自瓶-安全扩展的)的扩展中。
模型 烧瓶-安全性假设您将使用SQLAlchemy、MongoEngine、Peewee或PonyORM等库来定义包含用户和角色模型的数据模型。您的模型上的字段必须遵循特定的约定,这取决于应用程序需要的功能。除此之外,如果您愿意,您可以向模型中添加任何附加字段。至少您的用户和角色模型应该包括以下字段: 用户 id电子邮件密码活动 …
现在假设我的用户模型如下所示:
class User(UserMixin, db.Model):
'''This model represents all types of Users registered'''
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
user_email = db.Column(db.String(64), unique=True, index=True)
user_password_hash = db.Column(db.String(128))如果我必须将我的模型字段更改为烧瓶扩展所需的内容,这就要求我修改很多文件,这是一项繁琐的工作。
我想到的是这样的:
class User(UserMixin, db.Model):
'''This model represents all types of Users registered'''
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
id = self.user_id #For Flask-Extensions
user_email = db.Column(db.String(64), unique=True, index=True)
email = self.user_email #For Flask-Extensions
user_password_hash = db.Column(db.String(128))
password = self.user_password_hash #For Flask-Extensions这个解决方案有多糟糕,我有什么选择?
发布于 2018-04-14 10:11:51
我想你可以使用同义词。
我没查但我觉得这应该能行。
from sqlalchemy.orm import synonym
class User(UserMixin, db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
id = synonym('user_id')
user_email = db.Column(db.String(64), unique=True, index=True)
email = synonym('user_email')
user_password_hash = db.Column(db.String(128))
password = synonym('user_password_hash')发布于 2018-04-13 14:49:03
这或多或少是可行的,也是我做过的事。我建议使用一个属性来实现它:
@property
def id(self):
return self.user_id如果Flask也需要在类级别上访问该属性,则可以使用SQLAlchemy的hybrid_property。
https://stackoverflow.com/questions/49816063
复制相似问题