# data/edit_profile_form.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, TextAreaField, DateField, SelectField
from wtforms.validators import DataRequired, Length, Optional
from wtforms_components import ColorField

class EditProfileForm(FlaskForm):
    login = StringField('Ник/Логин', validators=[Optional(), Length(min=4, max=25)])
    name = StringField('Имя', validators=[Optional(), Length(min=4, max=20)])
    surname = StringField('Фамилия', validators=[Optional(), Length(min=4, max=25)])
    password = PasswordField('Новый пароль', validators=[Optional(), Length(min=8, max=16)])
    channel_description = TextAreaField('Описание канала', validators=[Optional(), Length(max=500)])
    birthday = DateField('День рождения', format='%Y-%m-%d', validators=[Optional()], render_kw={"placeholder": "YYYY-MM-DD"})

    # New fields for theme selection
    theme_name = SelectField(
        'Цветовая тема',
        choices=[
            ('default', 'Стандартная'),
            ('dark', 'Темная'),
            ('light', 'Светлая'),
            ('custom', 'Кастомная')
        ],
        default='default',
        validators=[DataRequired()]
    )

    # Color pickers for custom theme (visible only when 'Custom' is selected)
    theme_primary_color = ColorField('Первичный цвет(основной)', validators=[Optional()])
    theme_secondary_color = ColorField('Цвет текста', validators=[Optional()])
    theme_background_color = ColorField('Цвет фона', validators=[Optional()])

    submit = SubmitField('Обновить настройки профиля')

    def validate(self, *args, **kwargs):
        # Call the parent's validate method
        if not super(EditProfileForm, self).validate(*args, **kwargs):
            return False

        # Custom validation logic
        if self.theme_name.data == 'custom':
            if not all([self.theme_primary_color.data, self.theme_secondary_color.data, self.theme_background_color.data]):
                self.theme_primary_color.errors.append("Все цветовые поля должны быть заполнены.")
                return False

        return True
 добавь меры безопасности как здесь:
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, EqualTo, Regexp
from flask_wtf import FlaskForm

class RegisterForm(FlaskForm):
    username = StringField('Имя пользователя', validators=[
        DataRequired(),
        Length(min=4, max=20),
        Regexp('^(?![0-9]+$)[a-zA-Z0-9]*$', message="Имя пользователя не может состоять только из цифр.")
    ])
    password = PasswordField('Пароль', validators=[
        DataRequired(),
        Length(min=8, max=16),
        Regexp('^(?=.*[A-Za-z])(?=.*[0-9])', message="Пароль должен содержать буквы и цифры.")
    ])
    confirm_password = PasswordField('Повторите пароль', validators=[
        DataRequired(),
        EqualTo('password', message='Пароли должны совпадать.')
    ])
    name = StringField('Имя', validators=[
    DataRequired(),
    Length(min=4, max=20),
    Regexp('^[a-zA-ZА-Яа-яЁё0-9 ]*$', message="Имя должно содержать только буквы, цифры и пробелы.")
])
    remember_me = BooleanField('Запомнить меня')
    submit = SubmitField('Зарегистрироваться')