study_platform/app/forms.py
superlishunqin e62a101da0 0422-1010
2025-04-22 22:10:16 +08:00

87 lines
3.2 KiB
Python

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('验证码无效或已过期')