Mic*_*Hua 9 filesystems fastapi
我知道如何使用StaticFiles在 FastAPI 中提供静态文件,如何像 Apache Web 服务器中那样启用目录列表?
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI(...)
app.mount("/samples", StaticFiles(directory='samples'), name="samples")
# GET http://localhost:8000/samples/path/to/file.jpg -> OK
# GET http://localhost:8000/samples -> not found error
Run Code Online (Sandbox Code Playgroud)
我不确定 FastAPI/Starlette 是否公开了开箱即用的功能。
但自己实现一些东西应该不会太难。这可能是一个起点:
import os
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
@app.get("/static", response_class=HTMLResponse)
def list_files(request: Request):
files = os.listdir("./static")
files_paths = sorted([f"{request.url._url}/{f}" for f in files])
print(files_paths)
return templates.TemplateResponse(
"list_files.html", {"request": request, "files": files_paths}
)
Run Code Online (Sandbox Code Playgroud)
列表文件.html
<html>
<head>
<title>Files</title>
</head>
<body>
<h1>Files:</h1>
<ul>
{% for file in files %}
<li><a href="{{file}}">{{file}}</a></li>
{% endfor %}
</ul>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当你点击时/static你会看到:
请注意,这是一个 html 模板,应该位于@Michel Hua 在他的评论中相关提到的list_files.html目录中。templates/有关模板的更多信息,请查看模板文档。
| 归档时间: |
|
| 查看次数: |
2369 次 |
| 最近记录: |