Вы можете использовать одну модель для всех типов пользователей:
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
usertype = db.Column(db.String(120))
password_hash = db.Column(db.String(128))
User Loader просто будет иметь идентификатор:
@login.user_loader
def load_user(id):
return User.query.get(int(id))
Убедитесь, что во время регистрации вы должны задать тип пользователя:
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
usertype = SelectField('User Type', choices = [('sellers', 'sellers'),('buyers', 'buyers')], validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
password2 = PasswordField(
'Repeat Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Register')
И нет необходимости указывать тип пользователя при входе в систему:
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
submit = SubmitField('Sign In')
И в HTMl файлах вы можете кодировать соответственно. Возьмите пример этого фрагмента кода, взятого из базы. html.
{% if current_user.usertype == 'buyers' %}
<ul class="nav navbar-nav">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">List
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ url_for('buyerslist')}}">List of buyers</a></li>
</ul>
</li>
</ul>
{% endif %}