【问题标题】:Serve static files from root in FastAPI在 FastAPI 中从根目录提供静态文件
【发布时间】:2020-12-23 06:10:21
【问题描述】:

我正在尝试让 FastAPI 与 Svelte 一起使用。我已经用 Svelte 构建了静态文件,现在我正在尝试从 FastAPI 提供它们。问题是构建的 Svelte 文件引用了例如global.css 来自 root,这意味着我不能将它们安装在子文件夹中。

相反,我必须将它们安装在 root 上:

app.mount("/", StaticFiles(directory="web/public", html=True), name="web")

但是,这使得路由(函数装饰器)中定义的任何内容都无法访问。

是否可以同时定义静态文件 函数?要么,

a) 路由优先,如果没有路由,它会尝试从静态目录中读取

b) 静态目录优先,我指定了一个排除路径,该路径改为路由

【问题讨论】:

  • 哪些构建文件引用了/global.css?通常资产的位置(global.css 或 bundle.js)在 .html 文件中定义
  • 看看 sapper,它使用 sirv 处理静态文件,然后使用 sapper 中间件处理路由:github.com/sveltejs/sapper-template/blob/master/src/server.js
  • 我实际上求助于使用 Flask - 这个功能在那里工作。

标签: svelte fastapi


【解决方案1】:

创建一个外部(根)FastAPI 应用并在其中安装 StaticFiles 应用和您现有的 FastAPI 应用。

api_app = FastAPI(title="my existing api")
api_app.include_router(my_existing_router)

app = FastAPI(title="my app root")
app.mount('/api', api_app)
app.mount('/', StaticFiles(directory="static", html=True), name="static")

应用程序对象的安装顺序似乎很重要。对于 OpenAPI 文档,您将拥有一个用于根应用程序的 /docs,并为您的 API 应用程序提供一个 /api/docs

【讨论】:

    最近更新 更多