@toobinks

Flask. Как через форму редактировать профиль?

Не могу понять как реализовать стадию валидации для редактирования профиля. Как реализовать форму редактирования профиля без JS? Если пользователь меняет, например, почтовый адрес, то в валидацию приходят все поля, в том числе и те, которые не менялись. Для всех данных проходит валидация на уникальность и естественно не меняющиеся данные уже есть у пользователя.
Или я неправильно делаю, что не разделяю админку и функцию пользователя менять свои данные?

class User(UserMixin, SurrogatePK, Model):
    """A user of the app."""

    __tablename__ = 'users'
    username = Column(db.String(80), unique=True, nullable=False)
    email = Column(db.String(80), unique=True, nullable=False)
    password = Column(db.Binary(128), nullable=True)

class UserEditForm(Form):
    """Register form."""

    username = StringField('Username',
                           validators=[Optional(), Length(min=3, max=25)])
    email = StringField('Email',
                        validators=[Email(), Length(min=6, max=40)])
    password = PasswordField('Password',
                             validators=[Optional(), Length(min=6, max=40)])

    def __init__(self, *args, **kwargs):
        """Create instance."""
        super(UserEditForm, self).__init__(*args, **kwargs)
        self.user = None

    def validate(self):
        """Validate the form."""
        initial_validation = super(RegisterForm, self).validate()
        if not initial_validation:
            return False
        user = User.query.filter_by(username=self.username.data).first()
        if user:
            self.username.errors.append('Username already registered')
            return False
        user = User.query.filter_by(email=self.email.data).first()
        if user:
            self.email.errors.append('Email already registered')
            return False
        return True
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы