Python 从用户表继承的最佳方式(SQLAlchemy和UserMixin)
我有一张SQLALchemy表:Python 从用户表继承的最佳方式(SQLAlchemy和UserMixin),python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我有一张SQLALchemy表: class User(db.Model, UserMixin): user_id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(100), nullable=False, unique=True) password_hash = db.Column(db.String(40), nullable=False) 但我希望用户能够通过使用用户
class User(db.Model, UserMixin):
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), nullable=False, unique=True)
password_hash = db.Column(db.String(40), nullable=False)
但我希望用户能够通过使用用户名和密码创建新帐户,或者使用社交媒体帐户google/twitter/vk.com登录和注册。我的想法是建立一个基本用户表,其中包含抽象方法,如get_name,必须在每个社交媒体的派生表中定义
此的伪代码:
基本用户
class User(db.Model, UserMixin):
user_id = db.Column(db.Integer, primary_key=True)
# Overridden method from UserMixin
def get_id(self):
return self.user_id
def get_name(self): raise NotImplementedError
谷歌用户
class GoogleUser(User):
first_name = db.Columnn(db.String(40), nullable=False)
last_name = db.Columnn(db.String(40), nullable=False)
def get_name(self):
return '{} {}'.format(self.first_name, self.last_name)
电子邮件用户
class EmailUser(User):
username = db.Column(db.String(100), nullable=False, unique=True)
password_hash = db.Column(db.String(40), nullable=False)
def get_name(self):
return self.username
问题是用SQLAlchemy和UserMixin实现它的最佳方式是什么?
提前感谢您的帮助。我通常做的是创建一个包含应用程序所需所有信息的用户模型,例如
class User(db.Model, UserMixin):
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), nullable=False, unique=True)
password_hash = db.Column(db.String(40), nullable=True)
然后,对于第三方服务身份验证,我创建了一个表,该表存储应用程序所需的令牌和有关该服务的其他相关数据
class GoogleUser(db.Model):
first_name = db.Column(db.String(40), nullable=False)
last_name = db.Column(db.String(40), nullable=False)
google_token = db.Column(db.String(200), nullable=False)
我通过外键将此新表连接到用户模型:
google_user_id = db.Column(db.Integer, db.ForeignKey("google_user.id"))
这样,用户可以轻松地连接他们的第三方帐户,并在您的应用程序上拥有一个帐户
Facebook登录也建议这样做
希望它能把事情弄清楚