是否可以在路由路径中使用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