提供静态(或混合)内容的一种非常简单的 WSGI 方式。
项目描述
目录
</nav>该软件是 Luke Arnos 库static的 Python3 兼容分支。
该库现在与 Python3 兼容,并添加了Genshi支持( kid的继承者)。在 Python2 上,Genshi 和/或 Kid 可以用作模板引擎。在 Python3 上,只有 Genshi 可用。
这个库提供了一种在 WSGI 应用程序中包含静态内容的简单方法。有一种方便的方法可以通过 pkg_resources 提供文件。还有使用“魔术”文件处理程序提供混合(静态和动态)内容的工具。提供了 Python 内置字符串替换、kid 和 Genshi 模板支持,并且很容易滚动您自己的处理程序。请注意,除非您想使用该类型的模板,否则此发行版不需要 child 或 Genshi。当您只想通过 HTTP 临时共享一些内容时,还提供了一个同名命令以方便使用。
安装使用
通过 PIP 发布的最新版本:
pip install static3
通过 GitHub 安装:
git clone https://github.com/rmohr/static3.git cd static3 pip install .
紧贴
Cling仅提供静态内容。只需为它提供包含您想要访问的文件的基本目录。您将获得一个完整的 WSGI 应用程序,其中包含一个简单的示例:
from static import Cling
from wsgiref.simple_server import make_server
my_app = Cling("/my/directory")
make_server("localhost", 9999, my_app).serve_forever()
提供压缩文件
如果存在带有 'gz' 后缀的 gzip 压缩文件,则会提供该文件以及相应的标头。因此,如果文件 'index.html' 和文件 'index.html.gz' 存在,则如果客户端指示它支持 gzip 压缩的内容,则会提供文件 'index.html.gz'。
此外,您可以配置任意标头。您可以按 MIME 类型、文件扩展名或前缀匹配文件。例如,以下代码会将 Cache-Control 标头添加到具有 css mime 类型的路径为 10 秒,为所有以 .js 结尾的路径添加无缓存 100 秒,并将 CORS 标头添加到 /imgs/ 目录下的所有路径:
headers = [
{'type': 'text/css', 'Cache-Control': 'max-age=10'},
{'ext': '.js', 'Cache-Control': 'no-cache'},
{'prefix': '/imgs/', 'Access-Control-Allow-Origin': '*'},
]
Cling("/my/directory", headers=headers)
震惊
Shock具有与Cling相同的基本功能,但使用 Shock,我们还可以享受一些模板的乐趣。Shock 带有三个模板后端。字符串替换,kid 和 Genshi。通过检查要服务的文件的扩展名来决定使用哪个后端。文件扩展名为“stp”、“kid”和“genshi”。因此,如果您想通过孩子后端提供一个名为“index.html”的文件,请将您的文件命名为“index.html.kid”。一个简短的示例可能如下所示:
from static import Shock, KidMagic
from wsgiref.simple_server import make_server
my_app = Shock("/my/directory", magics=[KidMagic(title="Hello World")])
make_server("localhost", 9999, my_app).serve_forever()
以及示例“index.html.kid”:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://purl.org/kid/ns#"
xml:lang="en">
<head>
</head>
<body>
<h1>$title</h1>
</body>
</html>
Genshi 的类似模板“index.html.genshi”:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://genshi.edgewall.org/"
xml:lang="en">
<head>
</head>
<body>
<h1>$title</h1>
</body>
</html>
这个简单的应用程序会将每个提供的以“.kid”结尾的文件中的占位符标题替换为“Hello World”。在这个例子中已经很明显了,虽然可以使用不同的模板引擎,但它们只能以非常静态的方式使用。无论如何,Shock非常适合简单的半静态事物,例如制作公司徽标的 URL 或公司名称变量。
Unicode 支持
在 Python3 中使用模板系统时,可能需要为提供的站点显式设置编码。这可以通过 Shock的encoding属性来完成:
from static import Shock
shock = Shock("/var/www/pub")
shock.encoding="latin-1"
当使用Cling或Shock提供静态内容时,无需设置编码,因为内容只是流式传输。如果您有以不同格式编码的模板,则 需要为使用的每个编解码器实例化一个Shock实例。
项目详情
static3-0.7.0.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 674641c64bc75507af2eb20bef7e7e3593dca993dec6674be108fa15b42f47c8 |
|
| MD5 | 12f80b8a2528fffd8df4d9c438dc02e8 |
|
| 布莱克2-256 | 87b09cf15108b73c4f2ffffe11d237c938f57785f55d3693d822d565432cb680 |