一个最小的 fastapi 示例加载 index.html
A minimal fastapi example loading index.html
在我的项目文件夹中,我有一个基本的 index.html
文件加上静态文件(js,css)以及我的 main.py
:
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi import Request
app = FastAPI()
templates = Jinja2Templates(directory="/")
app.mount("/", StaticFiles(directory="/"))
@app.get("/")
def serve_home(request: Request):
return templates.TemplateResponse("index.html", context= {"request": request})
如何让 fastapi 在这里工作?我只想在本地主机上提供我的 index.html
和静态文件。
没有 static
或 templates
文件夹会不会有问题?
选项一:静态文件挂载
这比预期的要容易。只需要将包括index.html
在内的所有静态文件放入项目目录下的static
文件夹中,并挂载静态文件。
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
就是这样。我的 index.html
现在可以在 http://localhost:8000/static/index.html
下使用。
万一它应该可以在 http://localhost:8000/
下访问而无需 /static
并且 .html
结尾需要更改两件事。首先,它需要安装在 /
而不是 /static
上,并且安装时必须将 HTML 标志设置为 true
。所以只需使用这一行:
app.mount("/", StaticFiles(directory="static",html = True), name="static")
(感谢this answer)
index.html
现在可以在 http://localhost:8000/
下使用
选项 2:仅投放 index.html
由于 fastapi 基于 starlette,一个简单的 FileResponse
就可以完成这项工作。
from starlette.responses import FileResponse
@app.get("/")
async def read_index():
return FileResponse('index.html')
找到 here.
最适合我的最简单的解决方案:
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
api_app = FastAPI(title="api app")
@api_app.post("/set_influencers_to_follow")
async def set_influencers_to_follow(request):
return {}
app = FastAPI(title="main app")
app.mount("/api", api_app)
app.mount("/", StaticFiles(directory="ui", html=True), name="ui")
如果项目结构如下:
├── main.py
├── ui
│ ├── index.html
│ ├── style.css
│ ├── script.js
在我的项目文件夹中,我有一个基本的 index.html
文件加上静态文件(js,css)以及我的 main.py
:
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi import Request
app = FastAPI()
templates = Jinja2Templates(directory="/")
app.mount("/", StaticFiles(directory="/"))
@app.get("/")
def serve_home(request: Request):
return templates.TemplateResponse("index.html", context= {"request": request})
如何让 fastapi 在这里工作?我只想在本地主机上提供我的 index.html
和静态文件。
没有 static
或 templates
文件夹会不会有问题?
选项一:静态文件挂载
这比预期的要容易。只需要将包括index.html
在内的所有静态文件放入项目目录下的static
文件夹中,并挂载静态文件。
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
就是这样。我的 index.html
现在可以在 http://localhost:8000/static/index.html
下使用。
万一它应该可以在 http://localhost:8000/
下访问而无需 /static
并且 .html
结尾需要更改两件事。首先,它需要安装在 /
而不是 /static
上,并且安装时必须将 HTML 标志设置为 true
。所以只需使用这一行:
app.mount("/", StaticFiles(directory="static",html = True), name="static")
(感谢this answer)
index.html
现在可以在 http://localhost:8000/
选项 2:仅投放 index.html
由于 fastapi 基于 starlette,一个简单的 FileResponse
就可以完成这项工作。
from starlette.responses import FileResponse
@app.get("/")
async def read_index():
return FileResponse('index.html')
找到 here.
最适合我的最简单的解决方案:
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
api_app = FastAPI(title="api app")
@api_app.post("/set_influencers_to_follow")
async def set_influencers_to_follow(request):
return {}
app = FastAPI(title="main app")
app.mount("/api", api_app)
app.mount("/", StaticFiles(directory="ui", html=True), name="ui")
如果项目结构如下:
├── main.py
├── ui
│ ├── index.html
│ ├── style.css
│ ├── script.js