45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
from flask_wtf import FlaskForm
|
||
from wtforms import IntegerField, PasswordField, SelectField, StringField, SubmitField
|
||
from wtforms.validators import DataRequired, NumberRange, Optional, ValidationError
|
||
|
||
|
||
class LoginForm(FlaskForm):
|
||
username = StringField("用户名", validators=[DataRequired(message="请输入用户名")])
|
||
password = PasswordField("密码", validators=[DataRequired(message="请输入密码")])
|
||
submit = SubmitField("登录")
|
||
|
||
|
||
class GroupForm(FlaskForm):
|
||
name = StringField("分组名称", validators=[DataRequired(message="请输入分组名称")])
|
||
sort_order = IntegerField(
|
||
"排序(越小越靠前)",
|
||
validators=[Optional(), NumberRange(min=-10**6, max=10**6)],
|
||
default=0,
|
||
)
|
||
submit = SubmitField("保存")
|
||
|
||
|
||
class ServiceForm(FlaskForm):
|
||
name = StringField("服务名称", validators=[DataRequired(message="请输入服务名称")])
|
||
host = StringField("内网 IP 或主机名", validators=[DataRequired(message="请输入主机")])
|
||
port = IntegerField(
|
||
"端口",
|
||
validators=[
|
||
DataRequired(message="请输入端口"),
|
||
NumberRange(min=1, max=65535, message="端口范围 1–65535"),
|
||
],
|
||
)
|
||
path = StringField("路径(可选,默认 /)", validators=[Optional()])
|
||
group_id = SelectField("分组", coerce=int, validators=[DataRequired(message="请选择分组")])
|
||
sort_order = IntegerField(
|
||
"排序(越小越靠前)",
|
||
validators=[Optional(), NumberRange(min=-10**6, max=10**6)],
|
||
default=0,
|
||
)
|
||
submit = SubmitField("保存")
|
||
|
||
def validate_path(self, field):
|
||
v = (field.data or "").strip()
|
||
if v and not v.startswith("/"):
|
||
raise ValidationError("路径需以 / 开头,例如 /admin")
|