作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在服务 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 路由在客户端也能正常工作
not found
为了解决这个问题,我做了如下的事情。
@app.route('/network')
@app.route('/gat')
@app.route('/session')
async def renderReactApp(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
但这对我来说似乎很奇怪和错误,因为我需要在后端和前端添加每条路线。
@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/
我是一名优秀的程序员,十分优秀!