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