from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField, TextAreaField, BooleanField, SelectField from wtforms.validators import DataRequired, Email, EqualTo, Length, URL, Optional from flask_wtf.file import FileField, FileAllowed from wtforms.widgets import TextArea from flask_wtf import FlaskForm from wtforms import StringField, BooleanField, SubmitField from wtforms.validators import DataRequired, Length class CategoryForm(FlaskForm): name = StringField('分类名称', validators=[ DataRequired(message='分类名称不能为空'), Length(min=2, max=100, message='分类名称长度必须在2-100个字符之间') ]) is_public = BooleanField('设为公共分类') submit = SubmitField('保存') class LoginForm(FlaskForm): username = StringField('用户名', validators=[DataRequired()]) password = PasswordField('密码', validators=[DataRequired()]) submit = SubmitField('登录') class RegisterForm(FlaskForm): username = StringField('用户名', validators=[DataRequired(), Length(min=3, max=80)]) email = StringField('邮箱', validators=[DataRequired(), Email(), Length(max=120)]) password = PasswordField('密码', validators=[DataRequired(), Length(min=6)]) password2 = PasswordField('确认密码', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('注册') # 在 SiteForm 类中添加以下字段 class SiteForm(FlaskForm): name = StringField('站点名称', validators=[DataRequired(), Length(max=200)]) url = StringField('网址', validators=[DataRequired(), URL(), Length(max=500)]) description = TextAreaField('描述', validators=[Optional(), Length(max=500)]) category_id = SelectField('分类', coerce=int, validators=[DataRequired()]) custom_icon = FileField('自定义图标 (可选)', validators=[ FileAllowed(['jpg', 'jpeg', 'png', 'gif', 'webp'], '只允许上传图片文件!') ]) is_public = BooleanField('公开站点') submit = SubmitField('保存') class CategoryForm(FlaskForm): name = StringField('分类名称', validators=[DataRequired(), Length(max=100)]) is_public = BooleanField('公开分类') submit = SubmitField('保存') class ImportBookmarksForm(FlaskForm): bookmark_file = FileField('选择书签文件(HTML)', validators=[DataRequired()]) import_as_public = BooleanField('导入为公共书签(仅管理员)') submit = SubmitField('导入书签') class SearchForm(FlaskForm): q = StringField('搜索站点', validators=[Optional(), Length(max=100)]) class UserForm(FlaskForm): username = StringField('用户名', validators=[DataRequired()]) email = StringField('邮箱', validators=[DataRequired(), Email()]) password = PasswordField('密码', validators=[Optional()]) # 编辑时可选 password_confirm = PasswordField('确认密码', validators=[ Optional(), EqualTo('password', message='两次输入的密码必须一致') ]) is_admin = BooleanField('管理员') submit = SubmitField('提交')