静态文件
Starlette 还包括一个用于在给定目录中提供文件服务的 StaticFiles
类:
静态文件
签名: StaticFiles(directory=None, packages=None, html=False, check_dir=True, follow_symlink=False)
directory
- 表示目录路径的字符串或 os.PathLike。packages
- 一个 Python 包的字符串列表或字符串元组列表。html
- 以 HTML 模式运行。如果存在此类文件,会为目录自动加载index.html
。check_dir
- 确保在实例化时该目录存在。默认为True
。follow_symlink
- 一个布尔值,表示是否应遵循文件和目录的符号链接。默认为False
。
您可以将此 ASGI 应用程序与 Starlette 的路由相结合,以提供全面的静态文件服务。
from starlette.applications import Starlette
from starlette.routing import Mount
from starlette.staticfiles import StaticFiles
routes = [
...
Mount('/static', app=StaticFiles(directory='static'), name="static"),
]
app = Starlette(routes=routes)
对于不匹配的请求,静态文件将以“404 未找到”或“405 方法不允许”响应。在 HTML 模式下,如果 404.html
文件存在,它将作为 404 响应显示。
packages
选项可用于包含 Python 包内的“静态”目录。Python 的“bootstrap4”包就是一个这样的例子。
from starlette.applications import Starlette
from starlette.routing import Mount
from starlette.staticfiles import StaticFiles
routes=[
...
Mount('/static', app=StaticFiles(directory='static', packages=['bootstrap4']), name="static"),
]
app = Starlette(routes=routes)
默认情况下, StaticFiles
会在每个包中查找 statics
目录,您可以通过指定一个字符串元组来更改默认目录。
routes=[
...
Mount('/static', app=StaticFiles(packages=[('bootstrap4', 'static')]), name="static"),
]
您可能更愿意将静态文件直接包含在“static”目录内,而不是使用 Python 打包来包含静态文件,但这对于捆绑可复用组件可能是有用的。