from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo from wtforms import ValidationError from ..models import User from sqlalchemy import or_ class LoginForm(FlaskForm): email_or_username = StringField('邮箱/用户名', validators=[DataRequired(), Length(1, 64)]) password = PasswordField('密码', validators=[DataRequired()]) remember_me = BooleanField('保持登录信息') #用于让用户选择是否保持登录状态 submit = SubmitField('登录') class RegistrationForm(FlaskForm): email = StringField('邮箱', validators=[DataRequired(), Length(1, 64), Email()]) username = StringField('用户名', validators=[ DataRequired(), Length(1, 64), Regexp('^[A-Za-z0-9_\u4e00-\u9fa5\.]*$', 0, 'Usernames must have only letters, numbers, dots or ' 'underscores')]) password = PasswordField('密码', validators=[ DataRequired(), EqualTo('password2', message='Passwords must match.')]) password2 = PasswordField('确认密码', validators=[DataRequired()]) submit = SubmitField('注册') def validate_email(self, field): #用于验证用户输入的邮箱和用户名是否已经在数据库中被使用了 if User.query.filter_by(email=field.data.lower()).first(): raise ValidationError('邮箱已经注册') def validate_username(self, field): if User.query.filter_by(username=field.data).first(): raise ValidationError('用户名已被使用')