66 lines
2.7 KiB
Python
66 lines
2.7 KiB
Python
|
|
from datetime import datetime
|
|||
|
|
from typing import Optional
|
|||
|
|
|
|||
|
|
from flask_wtf import FlaskForm
|
|||
|
|
from wtforms import (
|
|||
|
|
BooleanField,
|
|||
|
|
IntegerField,
|
|||
|
|
PasswordField,
|
|||
|
|
SelectField,
|
|||
|
|
StringField,
|
|||
|
|
SubmitField,
|
|||
|
|
TextAreaField,
|
|||
|
|
)
|
|||
|
|
from wtforms.validators import DataRequired, Length, NumberRange, Optional as OptionalValidator
|
|||
|
|
|
|||
|
|
|
|||
|
|
class LoginForm(FlaskForm):
|
|||
|
|
username = StringField("用户名", validators=[DataRequired(), Length(max=64)])
|
|||
|
|
password = PasswordField("密码", validators=[DataRequired()])
|
|||
|
|
submit = SubmitField("登录")
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ApiConfigForm(FlaskForm):
|
|||
|
|
name = StringField("名称", validators=[DataRequired(), Length(max=128)])
|
|||
|
|
description = TextAreaField("描述", validators=[OptionalValidator()])
|
|||
|
|
url = StringField("URL 地址", validators=[DataRequired(), Length(max=512)])
|
|||
|
|
http_method = SelectField(
|
|||
|
|
"HTTP 方法",
|
|||
|
|
choices=[("GET", "GET"), ("POST", "POST"), ("PUT", "PUT"), ("DELETE", "DELETE")],
|
|||
|
|
validators=[DataRequired()],
|
|||
|
|
)
|
|||
|
|
headers = TextAreaField("请求头(JSON)", validators=[OptionalValidator()])
|
|||
|
|
query_params = TextAreaField("查询参数(JSON)", validators=[OptionalValidator()])
|
|||
|
|
body = TextAreaField("请求体(JSON 或文本)", validators=[OptionalValidator()])
|
|||
|
|
schedule_type = SelectField(
|
|||
|
|
"调度类型",
|
|||
|
|
choices=[("cron", "cron"), ("interval", "interval"), ("daily", "daily")],
|
|||
|
|
validators=[DataRequired()],
|
|||
|
|
)
|
|||
|
|
schedule_expression = StringField("调度表达式", validators=[DataRequired(), Length(max=128)])
|
|||
|
|
timeout_seconds = IntegerField("超时时间(秒)", validators=[DataRequired(), NumberRange(min=1, max=600)])
|
|||
|
|
retry_times = IntegerField("重试次数", validators=[DataRequired(), NumberRange(min=0, max=10)])
|
|||
|
|
retry_interval_seconds = IntegerField(
|
|||
|
|
"重试间隔(秒)", validators=[DataRequired(), NumberRange(min=1, max=300)]
|
|||
|
|
)
|
|||
|
|
enabled = BooleanField("启用", default=True)
|
|||
|
|
submit = SubmitField("保存")
|
|||
|
|
|
|||
|
|
|
|||
|
|
class LogFilterForm(FlaskForm):
|
|||
|
|
api_id = SelectField("API", coerce=int, validators=[OptionalValidator()])
|
|||
|
|
success = SelectField(
|
|||
|
|
"成功状态", choices=[("", "全部"), ("1", "成功"), ("0", "失败")], validators=[OptionalValidator()]
|
|||
|
|
)
|
|||
|
|
start_date = StringField("开始日期(YYYY-MM-DD)", validators=[OptionalValidator()])
|
|||
|
|
end_date = StringField("结束日期(YYYY-MM-DD)", validators=[OptionalValidator()])
|
|||
|
|
submit = SubmitField("筛选")
|
|||
|
|
|
|||
|
|
def parse_date(self, value: str) -> Optional[datetime]:
|
|||
|
|
if not value:
|
|||
|
|
return None
|
|||
|
|
try:
|
|||
|
|
return datetime.strptime(value, "%Y-%m-%d")
|
|||
|
|
except ValueError:
|
|||
|
|
return None
|