apiScheduler/app/forms.py

66 lines
2.7 KiB
Python
Raw Normal View History

2025-11-28 17:39:54 +08:00
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