from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, Email, EqualTo, Length, ValidationError from models import User from wtforms import FileField from wtforms.validators import Email, Optional from flask_wtf.file import FileAllowed class EditProfileForm(FlaskForm): username = StringField('Имя пользователя', validators=[Optional()]) email = StringField('Email', validators=[Optional(), Email()]) avatar = FileField('Аватарка', validators=[FileAllowed(['jpg', 'png', 'jpeg'], 'Только изображения')]) current_password = PasswordField('Текущий пароль', validators=[Optional()]) new_password = PasswordField('Новый пароль', validators=[Optional()]) confirm_password = PasswordField('Подтвердите новый пароль', validators=[ Optional(), EqualTo('new_password', message='Пароли должны совпадать') ]) submit = SubmitField('Сохранить') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user: raise ValidationError('Этот email уже используется') class LoginForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Пароль', validators=[DataRequired()]) submit = SubmitField('Войти') class RegistrationForm(FlaskForm): username = StringField( 'Имя пользователя', validators=[ DataRequired(message="Пожалуйста, введите имя пользователя."), Length(min=4, max=25, message="Имя пользователя должно быть от 4 до 25 символов.") ] ) email = StringField( 'Email', validators=[ DataRequired(message="Пожалуйста, введите email."), Email(message="Пожалуйста, введите корректный email.") ] ) password = PasswordField( 'Пароль', validators=[ DataRequired(message="Пожалуйста, введите пароль."), Length(min=6, message="Пароль должен содержать не менее 6 символов.") ] ) confirm_password = PasswordField( 'Подтвердите пароль', validators=[ DataRequired(message="Пожалуйста, подтвердите пароль."), EqualTo('password', message="Пароли не совпадают.") ] ) submit = SubmitField('Зарегистрироваться')