from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField from wtforms.validators import DataRequired, Email, EqualTo, Length, ValidationError from app.models import User class LoginForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) remember_me = BooleanField('Remember Me') submit = SubmitField('Sign In') class RegistrationForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[ DataRequired(), Length(min=8, message='Password must be at least 8 characters long') ]) password2 = PasswordField('Repeat Password', validators=[ DataRequired(), EqualTo('password', message='Passwords must match') ]) submit = SubmitField('Register') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError('Email already registered.') class ResetPasswordRequestForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) submit = SubmitField('Request Password Reset') class ResetPasswordForm(FlaskForm): password = PasswordField('New Password', validators=[ DataRequired(), Length(min=8, message='Password must be at least 8 characters long') ]) password2 = PasswordField('Repeat Password', validators=[ DataRequired(), EqualTo('password', message='Passwords must match') ]) submit = SubmitField('Reset Password') class EmailVerificationForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) submit = SubmitField('发送验证码') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError('该邮箱已被注册') # 验证邮箱是否属于允许的域名 if not email.data.endswith('@sq0715.com'): pass # 可以在这里添加邮箱域名限制逻辑 class RegistrationForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) verification_code = StringField('验证码', validators=[DataRequired(), Length(min=6, max=6)]) username = StringField('用户名', validators=[DataRequired()]) password = PasswordField('密码', validators=[ DataRequired(), Length(min=8, message='密码至少需要8个字符') ]) password2 = PasswordField('确认密码', validators=[ DataRequired(), EqualTo('password', message='两次输入的密码必须匹配') ]) submit = SubmitField('注册') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError('该邮箱已被注册') def validate_verification_code(self, verification_code): from app.utils.email import verify_code if not verify_code(self.email.data, verification_code.data): raise ValidationError('验证码无效或已过期')