У меня есть таблица 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)
Но я хочу, чтобы пользователи могли входить и регистрироваться, используя либо создание новой учетной записи с именем пользователя и паролем, либо использование учетной записи социальной сети (Google / Twitter /vk.com). Моя идея состоит в том, чтобы иметь базовую таблицу User, которая будет содержать абстрактные методы, такие как get_name (), которые должны быть определены в производных таблицах для каждой социальной сети.
Псевдокод для этого:
Base user
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
Google user
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)
E-mail user
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? Спасибо за любую помощь заранее.