Другой тип регистрации пользователя в flask - PullRequest
1 голос
/ 19 февраля 2020

Я новичок в Flask, и я просто хотел создать простой рынок с ним. На моем сайте есть три типа пользователей [продавцы, покупатели, администраторы]. Я думаю, что у каждого типа пользователей должна быть своя собственная регистрация и логин, потому что из-за их роли должен быть предоставлен различный тип информации. С другой стороны, каждый пользователь может иметь несколько ролей на веб-сайте, поэтому я не думаю, что можно было бы создать одну таблицу для всех пользователей и назначить им роль. В результате я думаю, что должно быть три таблицы для каждого типа пользователей.

, поскольку есть только пользовательский загрузчик для пользователей, как я могу достичь своей цели.

Я не уверен, правильно ли это или нет, думаю, я мог бы создать полноценного пользователя со всеми необходимыми столбцами и на основе адреса, который пользователь использует для регистрации, добавить соответствующую информацию в базу данных. и на основе адреса, который пользователь использует для входа в систему, найдите подходящую роль и отобразите правильное представление.

1 Ответ

2 голосов
/ 19 февраля 2020

Вы можете использовать одну модель для всех типов пользователей:

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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...