【问题标题】:Is it possible to pass a path to a fastapi end point?是否可以将路径传递到 fastapi 端点?
【发布时间】:2020-03-24 14:21:49
【问题描述】:

我正在尝试使用 fastapi 创建一个遍历 api 的文件夹。 假设我有一个这样的终点:

@root_router.get("/path/{path}")
def take_path(path):
    logger.info("test %s", path)
    return path

如果我对浏览器执行此操作并调用“URL:PORT/path/path”

它返回“路径”,很简单。但是,如果我尝试“URL:PORT/path/path/path”,代码甚至不会到达记录器。我想这是有道理的,因为 API 不存在那个端点。但它确实存在于我的服务器上。我已经想出了其他方法来做到这一点,即将路径作为参数数组传递并使用 / 分隔符在代码中重新生成,但是如果我可以通过 url 中的路径移动,则在 url 中传递参数感觉有点笨拙我的服务器,那将是理想的。这可行吗?

谢谢。

【问题讨论】:

    标签: python python-3.x fastapi


    【解决方案1】:

    :path 添加到您的参数中:

    @root_router.get("/path/{path:path}")
    async def take_path(path: str):
        logger.info("test %s", path)
        return path
    

    请注意,这是 Starlette 功能。

    【讨论】:

    • 哇,成功了。谢谢。这是正确的方法,是吗?有什么建议吗?我正在使用 Angular 调用 api 并提供文件。
    • @ScipioAfricanus 通常不鼓励这种 API 设计。例如,OpenAPI 甚至不允许定义这样的东西。我建议将路径作为查询参数传递。但是,如果您决定继续当前的设计,这是标准方法。
    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 2022-11-10
    • 2012-01-27
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2022-12-31
    相关资源
    最近更新 更多