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
|