我想让FastAPI和斯维特合作。我已经用Svelte构建了静态文件,现在我正在尝试从FastAPI中提供它们。问题是构建的Svelte文件从根引用例如global.css
,这意味着我不能将它们安装在子文件夹上。
相反,我必须将它们挂载到根上:
app.mount("/", StaticFiles(directory="web/public", html=True), name="web")
但是,这使得在路由(函数装饰器)中定义的任何内容都无法访问。
是否可能同时定义了静态文件和函数?无论是,
( a)路由优先,如果没有路由,则尝试从静态目录读取
( b)静态目录优先,我指定了一个排除路径,该路径改为路由。
发布于 2021-07-22 08:15:46
创建一个外部(根) FastAPI应用程序,并在其中挂载StaticFiles应用程序和现有的FastAPI应用程序。
# Your main app must be first!
app = FastAPI(title="my app root")
api_app = FastAPI(title="my existing api")
api_app.include_router(my_existing_router)
app.mount('/api', api_app)
app.mount('/', StaticFiles(directory="static", html=True), name="static")
安装应用程序对象的顺序似乎很重要。对于OpenAPI文档,您将为根应用程序提供一个/docs
,为您的API应用程序提供一个/api/docs
。
发布于 2022-10-01 00:05:37
我认为有一个比这里发布的更简单的解决方案:只需在之后挂载静态文件夹,即其他端点的定义。
app = FastAPI()
@app.get("/api/hello")
async def hello():
return "hello from fastapi"
app.mount("/", StaticFiles(directory="build", html=True), name="frontend")
现在,您可以访问根上用作静态站点的网站,同时也可以访问您可能希望用于后端功能的端点。
发布于 2022-07-13 05:52:51
您也可以在不创建“外部(根)应用程序”的情况下这样做;只要您在包含路由器之后挂载静态文件。
假设你有:
"project/main.py"
文件中
main.py
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from starlette.responses import RedirectResponse
from subfolder.do_stuff import a_router
app = FastAPI()
app.include_router(a_router)
app.mount("", StaticFiles(directory="client/public", html=True), name="client")
app.mount("/build", StaticFiles(directory="client/public/build"), name="build")
@app.get('/')
async def client(): return RedirectResponse(url="client")
https://stackoverflow.com/questions/65419794
复制相似问题