如何为许多 FastAPI 端点设置多个默认值
How can I set a number of default values for many FastAPI endpoints
我正在使用 FastAPI,我有许多端点如下所示:
@app.get("/REDS/")
def query_REDS( request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
pass # Work done here
@app.get("/BLUES/")
def query_BLUES( request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
pass # Work done here
@app.get("/GREENS/")
def query_GREENS( request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
pass # Work done here
大摇大摆的样子是这样的UI:
真正的配置在请求中传递并手动解析。每当我需要更新这些端点的签名时,我需要在大约 20 个不同的地方进行更新。有没有办法在一个地方定义那些特定的默认参数?
我尝试使用 pydantic
BaseModel
来定义输入模型:
class Arguments(BaseModel):
lighter: Optional[bool] = False
darker: Optional[bool] = False
inverse: Optional[bool] = False
amount: Optional[int] = 10
@app.get("/REDS/")
def query_REDS( request: Request, arguments: Arguments):
pass # Work done here
@app.get("/BLUES/")
def query_BLUES( request: Request, arguments: Arguments):
pass # Work done here
@app.get("/GREENS/")
def query_GREENS( request: Request, arguments: Arguments):
pass # Work done here.
但这不是我所追求的,首先是因为不推荐在 get 请求中使用 body,也不是任何地方都支持它,其次是因为它在 swagger 中没有那么有用 UI :
有没有办法为许多不同的 enpoints 定义一种默认签名?
做你想做的,你可以使用常规 类 或 pydantic 模型 class dependencies:
class CommonParams:
def __init__(self, request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
self.request = request
self.lighter = lighter
self.darker = darker
self.inverse = inverse
self.amount = amount
class Arguments(BaseModel):
lighter: Optional[bool] = False
darker: Optional[bool] = False
inverse: Optional[bool] = False
amount: Optional[int] = 10
@app.get("/REDS/")
def query_REDS(params=Depends(CommonParams)):
pass # Work done here
@app.get("/BLUES/")
def query_BLUES(params=Depends(Arguments)):
pass # Work done here
我正在使用 FastAPI,我有许多端点如下所示:
@app.get("/REDS/")
def query_REDS( request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
pass # Work done here
@app.get("/BLUES/")
def query_BLUES( request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
pass # Work done here
@app.get("/GREENS/")
def query_GREENS( request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
pass # Work done here
大摇大摆的样子是这样的UI:
真正的配置在请求中传递并手动解析。每当我需要更新这些端点的签名时,我需要在大约 20 个不同的地方进行更新。有没有办法在一个地方定义那些特定的默认参数?
我尝试使用 pydantic
BaseModel
来定义输入模型:
class Arguments(BaseModel):
lighter: Optional[bool] = False
darker: Optional[bool] = False
inverse: Optional[bool] = False
amount: Optional[int] = 10
@app.get("/REDS/")
def query_REDS( request: Request, arguments: Arguments):
pass # Work done here
@app.get("/BLUES/")
def query_BLUES( request: Request, arguments: Arguments):
pass # Work done here
@app.get("/GREENS/")
def query_GREENS( request: Request, arguments: Arguments):
pass # Work done here.
但这不是我所追求的,首先是因为不推荐在 get 请求中使用 body,也不是任何地方都支持它,其次是因为它在 swagger 中没有那么有用 UI :
有没有办法为许多不同的 enpoints 定义一种默认签名?
做你想做的,你可以使用常规 类 或 pydantic 模型 class dependencies:
class CommonParams:
def __init__(self, request: Request, lighter: Optional[bool] = False, darker: Optional[bool] = False, inverse: Optional[bool] = False, amount: Optional[int] = 10):
self.request = request
self.lighter = lighter
self.darker = darker
self.inverse = inverse
self.amount = amount
class Arguments(BaseModel):
lighter: Optional[bool] = False
darker: Optional[bool] = False
inverse: Optional[bool] = False
amount: Optional[int] = 10
@app.get("/REDS/")
def query_REDS(params=Depends(CommonParams)):
pass # Work done here
@app.get("/BLUES/")
def query_BLUES(params=Depends(Arguments)):
pass # Work done here