Files
pt_blacklist/app/forms.py
2025-11-24 21:25:38 +08:00

94 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, PasswordField, BooleanField, TextAreaField, SelectField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError, Optional, URL
from .models import User
from wtforms_sqlalchemy.fields import QuerySelectField
from .filters import REASON_TRANSLATIONS
class SearchForm(FlaskForm):
search_term = StringField(
'输入用户名或邮箱进行查询',
validators=[DataRequired(message="查询内容不能为空。"), Length(min=3, max=100)],
render_kw={"placeholder": "用户名 / 邮箱"}
)
submit = SubmitField('查询')
class RegistrationForm(FlaskForm):
username = StringField('用户名(与PT站点相同)', validators=[DataRequired(), Length(min=3, max=64)])
email = StringField('邮箱(与PT站点相同)', validators=[DataRequired(), Email()])
password = PasswordField('密码', validators=[DataRequired(), Length(min=6)])
password2 = PasswordField(
'确认密码', validators=[DataRequired(), EqualTo('password', message='两次输入的密码必须一致。')])
pt_site = SelectField('所属站点', validators=[DataRequired()])
uid = StringField('你在该站点的 UID', validators=[DataRequired(), Length(max=50)])
submit = SubmitField('提交注册申请')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError('该用户名已被使用。')
def validate_email(self, email):
user = User.query.filter_by(email=email.data.lower()).first()
if user:
raise ValidationError('该邮箱已被注册。')
class LoginForm(FlaskForm):
email = StringField('邮箱', validators=[DataRequired(), Length(1, 120), Email()])
password = PasswordField('密码', validators=[DataRequired()])
remember_me = BooleanField('记住我')
submit = SubmitField('登录')
class ReportForm(FlaskForm):
reported_pt_site = SelectField('违规站点', validators=[DataRequired()])
reported_username = StringField(
'被举报的用户名',
validators=[Optional(), Length(max=50)],
render_kw={"placeholder": "可选"}
)
reported_email = StringField(
'被举报的邮箱',
validators=[DataRequired(), Email(message="请输入有效的邮箱地址。")],
render_kw={"placeholder": "必须填写"}
)
reason_category = SelectField(
'举报原因分类',
choices=[(k, v) for k, v in REASON_TRANSLATIONS.items()],
validators=[DataRequired()]
)
description = TextAreaField(
'详细情况描述',
validators=[DataRequired(), Length(min=10, max=2000)],
render_kw={"rows": 5, "placeholder": "请详细描述事件经过至少10个字符。"}
)
evidences = TextAreaField(
'证据图片链接 (每个链接占一行)',
validators=[DataRequired(message="请至少提供一个有效的图片链接。")],
render_kw={"rows": 4, "placeholder": "https://example.com/image1.png\nhttps://example.com/image2.jpg"}
)
submit = SubmitField('提交举报')
class RevokeForm(FlaskForm):
reason = TextAreaField('撤销理由', validators=[DataRequired(message='必须填写撤销理由。')])
submit = SubmitField('确认撤销')
class UpdateUserForm(FlaskForm):
role = SelectField('角色', choices=[
('user', '普通用户 (User)'),
('trust_user', '信任用户 (Trust User)'),
('admin', '管理员 (Admin)')
], validators=[DataRequired()])
status = SelectField('状态', choices=[
('active', '正常'),
('disabled', '已禁用')
], validators=[DataRequired()])
submit = SubmitField('更新')
class CommentForm(FlaskForm):
body = TextAreaField('添加你的审核建议', validators=[DataRequired()])
submit = SubmitField('提交')
class AppealForm(FlaskForm):
reason = TextAreaField('申诉理由', validators=[DataRequired()], render_kw={'rows': 5, 'placeholder': '请详细说明您认为该举报不成立的原因,并提供任何可以支持您观点的证据。'})
submit = SubmitField('提交申诉')
class AppealMessageForm(FlaskForm):
body = TextAreaField('回复内容', validators=[DataRequired()], render_kw={'rows': 4, 'placeholder': '请输入您的回复...'})
submit = SubmitField('发送')
class PartnerSiteForm(FlaskForm):
name = StringField('站点名称', validators=[DataRequired(), Length(max=100)])
url = StringField('站点 URL (可选)', validators=[Optional(), URL(), Length(max=255)])
submit = SubmitField('添加站点')