fastapi在路由路径中使用bool



是否可以在路由路径中使用bool参数?

@app.get("/allprojects")
@app.get("/allprojects/{reload}")
async def GetAllProjects(reload:typing.Optional[bool]=False):

使用/allprojects?reload=true工作,但/allprojects/reload=true/allprojects/reload都不能工作,它们都返回:

{"detail":[{"loc":["path","reload"],"msg":"value could not be parsed to a boolean","type":"type_error.bool"}]}

我知道我可以创建一个单独的路由重新加载作为str,但最好使用bool参数。

多亏了@astrochun,这暗示了解决方案,第二行实际上是函数中不允许的str,因此使用typing.Union[bool,str]并处理str事件解决了它:

@app.get("/allprojects", response_class=HTMLResponse)
@app.get("/allprojects/{reload}", response_class=HTMLResponse)
async def GetAllProjects(request:Request, reload:typing.Optional[typing.Union[bool, str]]=False):
""" get all projects from cache, reload=True will reread projects taking 3minutes """
if isinstance(reload, str):
reload:bool = True
allprojects = gitlab.allprojects(reload=reload)

所以现在/allprojects/reload/allprojects?reload=true重新读取,而/allprojects从数据库读取需要15ms

相关内容

  • 没有找到相关文章

最新更新