如何使一个查询参数依赖于 FastApi 中的另一个查询参数?

Jav*_*nas 6 python api

我想根据FastApi中的另一个查询参数设置一个必需的查询参数

例如我有四个查询参数:commandstart_dateend_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”就足够了。