我有一个带有请求参数的GET
方法:
@router.get('/users/{user_id}')
async def get_user_from_string(user_id: str):
return User(user_id)
是否可以从请求中获取基本url原始路径(即'/users/{user_id}'
)?
我曾尝试使用以下方法:
path = [route for route in request.scope['router'].routes if
route.endpoint == request.scope['endpoint']][0].path
但这不起作用,我明白:
AttributeError:‘挂载’对象没有属性‘终结点’
发布于 2022-06-17 08:54:48
可以在请求中使用APIRout对象属性来获取实际路径。
示例:
raw_path = request.scope['route'].path
#'/user/{id}'
发布于 2022-05-14 10:06:46
根据FastAPI 文档
由于FastAPI实际上是Starlette,上面有一个由几个工具组成的层,因此您可以在需要时直接使用Starlette的
Request
对象。
因此,您可以使用Request
对象获取URL路径。例如:
from fastapi import Request
@app.get('/users/{user_id}')
def get_user(user_id: str, request: Request):
return request.url.path
输出(如果接收到的user_id
为1
):
/users/1
更新
但是,如果您需要的是原始路由路径,即/users/{user_id}
,则可以使用以下内容。它的工作方式是首先获得root_path
--这通常是一个空字符串,除非您已经将分申请挂载到顶级应用程序(例如app.mount("/subapi", subapi)
),因此,您需要将结果以特定的路径/subapi
-and作为前缀,然后将路由的路径附加到该路径,您可以从APIRoute对象获得该路径。示例:
from fastapi import Request
@app.get('/users/{user_id}')
def get_user(user_id: str, request: Request):
path = request.scope['root_path'] + request.scope['route'].path
return path
输出
/users/{user_id}
发布于 2022-10-04 04:15:26
下面的解决方案对我来说很好,使用字符串替换为count
参数只替换第一次出现。request.path_params
将按照请求中所取的顺序返回路径参数。
def get_raw_path(request):
path = request.url.path
for key, val in request.path_params.items():
path = path.replace(val, F'{{{key}}}',1)
return path
https://stackoverflow.com/questions/72217828
复制相似问题