gpt4 book ai didi

python-3.x - 如何在 FastAPI 中的一条路线上捕获任意路径?

转载 作者:行者123 更新时间:2023-12-04 04:27:10 26 4
gpt4 key购买 nike

我在服务 react 来自 的应用程序FastAPI
安装

app.mount("/static", StaticFiles(directory="static"), name="static")

@app.route('/session')
async def renderReactApp(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
通过这个 React 应用程序得到服务,并且 React 路由在客户端也能正常工作
但是一旦客户端重新加载未在服务器上定义但在 React 应用程序 FastAPI 中使用的路由返回 not found为了解决这个问题,我做了如下的事情。
  • @app.route('/network')
  • @app.route('/gat')
  • @app.route('/session')
  • async def renderReactApp(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})
    但这对我来说似乎很奇怪和错误,因为我需要在后端和前端添加每条路线。
    我确定一定有类似 Flask 的东西 @flask_app.add_url_rule('/<path:path>', 'index', index)在 FastAPI 中,它将为所有任意路径提供服务

    最佳答案

    由于 FastAPI 基于 Starlette,您可以使用类型 path 将他们所谓的“转换器”与您的路由参数一起使用。在这种情况下,它“返回路径的其余部分,包括任何其他 / 字符。”
    https://www.starlette.io/routing/#path-parameters供引用。
    如果您的 react(或 vue 或 ...)应用程序使用的是基本路径,您可以执行以下操作,即在 /my-app/ 之后分配任何内容到 rest_of_path变量:

    @app.get("/my-app/{rest_of_path:path}")
    async def serve_my_app(request: Request, rest_of_path: str):
    print("rest_of_path: "+rest_of_path)
    return templates.TemplateResponse("index.html", {"request": request})
    如果您没有使用像 /my-app/ 这样的唯一基本路径(这似乎是你的用例),你仍然可以用一个包罗万象的路由来完成这个,它应该遵循任何其他路由,这样它就不会覆盖它们:
    @app.route("/{full_path:path}")
    async def catch_all(request: Request, full_path: str):
    print("full_path: "+full_path)
    return templates.TemplateResponse("index.html", {"request": request})
    (事实上​​,为了捕捉对 /my-app//my-app 的请求之间的差异,您可能希望使用此包罗万象的方法)

    关于python-3.x - 如何在 FastAPI 中的一条路线上捕获任意路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63069190/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com