我想根据FastApi中的另一个查询参数设置一个必需的查询参数
例如我有四个查询参数:command、start_date和end_dateincrement
如果command等于“分析”,则end_date必须是必需的。但如果command等于“add_working_days”则end_date不是必需的,而是increment必需的。这可能吗?
这是我现在的代码:
import datetime
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/api/")
async def read_item(
start_date: str = Query(..., regex=r"[\d]{4}-[\d]{1,2}-[\d]{1,2}"),
end_date: str = Query(..., regex=r"[\d]{4}-[\d]{1,2}-[\d]{1,2}"),
command: str = None,
increment: int = None,
):
parsed_start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
parsed_end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")
duration = parsed_end_date - parsed_start_date
return duration.days
Run Code Online (Sandbox Code Playgroud)
小智 4
我建议将你的 api 分开
import datetime
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/api/analyse")
async def read_item_for_analyse(
start_date: str = Query(..., regex=r"[\d]{4}-[\d]{1,2}-[\d]{1,2}"),
end_date: str = Query(..., regex=r"[\d]{4}-[\d]{1,2}-[\d]{1,2}"),
increment: int = None,
):
# do something
@app.get("/api/add_working_days")
async def read_item_for_add_working_days(
start_date: str = Query(..., regex=r"[\d]{4}-[\d]{1,2}-[\d]{1,2}"),
end_date: str = None,
increment: int = Query(..., title="Increase working days"),
):
# do something
Run Code Online (Sandbox Code Playgroud)
它清晰易懂,或者继续你的风格并添加一些“if...else”就足够了。