首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FastAPI:如何从请求中获取原始URL路径?

FastAPI:如何从请求中获取原始URL路径?
EN

Stack Overflow用户
提问于 2022-05-12 14:55:41
回答 5查看 2.1K关注 0票数 3

我有一个带有请求参数的GET方法:

代码语言:javascript
运行
复制
@router.get('/users/{user_id}')
async def get_user_from_string(user_id: str):
    return User(user_id)

是否可以从请求中获取基本url原始路径(即'/users/{user_id}')?

我曾尝试使用以下方法:

代码语言:javascript
运行
复制
path = [route for route in request.scope['router'].routes if
        route.endpoint == request.scope['endpoint']][0].path

但这不起作用,我明白:

AttributeError:‘挂载’对象没有属性‘终结点’

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-06-17 08:54:48

可以在请求中使用APIRout对象属性来获取实际路径。

示例:

代码语言:javascript
运行
复制
raw_path = request.scope['route'].path 
#'/user/{id}'
票数 -3
EN

Stack Overflow用户

发布于 2022-05-14 10:06:46

根据FastAPI 文档

由于FastAPI实际上是Starlette,上面有一个由几个工具组成的层,因此您可以在需要时直接使用Starlette的Request对象。

因此,您可以使用Request对象获取URL路径。例如:

代码语言:javascript
运行
复制
from fastapi import Request

@app.get('/users/{user_id}')
def get_user(user_id: str, request: Request):
    return request.url.path

输出(如果接收到的user_id1):

代码语言:javascript
运行
复制
/users/1 

更新

但是,如果您需要的是原始路由路径,即/users/{user_id},则可以使用以下内容。它的工作方式是首先获得root_path --这通常是一个空字符串,除非您已经将分申请挂载到顶级应用程序(例如app.mount("/subapi", subapi)),因此,您需要将结果以特定的路径/subapi-and作为前缀,然后将路由的路径附加到该路径,您可以从APIRoute对象获得该路径。示例:

代码语言:javascript
运行
复制
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

输出

代码语言:javascript
运行
复制
/users/{user_id}
票数 1
EN

Stack Overflow用户

发布于 2022-10-04 04:15:26

下面的解决方案对我来说很好,使用字符串替换为count参数只替换第一次出现。request.path_params将按照请求中所取的顺序返回路径参数。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72217828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档