python - 如何为许多 FastAPI 端点设置多个默认值
问题描述
我正在使用 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
真正的配置在请求中传递并手动解析。每当我需要更新这些端点的签名时,我都需要在 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.
但这不是我所追求的,首先是因为不建议在获取请求中使用正文,也不支持在任何地方,其次是因为它在招摇 UI 中没有那么有用:
有没有办法为许多不同的端点定义一种默认签名?
解决方案
做你想做的事,你可以使用常规类或 pydantic 模型作为类依赖项:
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
推荐阅读
- wso2 - WSO2 ESB 6.1.1 - 任何 CApp 都没有响应
- html - 用于多个头脚本的具有多个导轨布局的多个视图
- c++ - 如何防止带有模板的整个 API 仅成为 .h 文件的集合?
- design-patterns - 我什么时候应该使用单例模式?
- illegalstateexception - 为 Oreo 限制启动服务作为前台或不启动服务
- java - SwingUtilities.InvokeAndWait() 不执行可运行代码
- ef-code-first - EF 核心并创建多对多表。创建额外的字段。为什么 ?
- c# - 无法使用 LINQ to SQL 插入数据库
- bash - .sh 文件中的 json 处理
- neural-network - 神经网络中的计算时间前向传播与反向传播?