跳转到主要内容

受whitenoise启发的静态文件服务ASGI应用程序

项目描述

blacknoise

PyPI - Version PyPI - Python Version

blacknoise是一个受ASGI启发的静态文件服务应用程序,灵感来源于whitenoise,并遵循低维护软件的原则。

使用blacknoise服务静态文件

将blacknoise安装到您的Python环境中

pip install blacknoise

使用BlackNoise应用程序包装您的ASGI应用程序

from blacknoise import BlackNoise
from django.core.asgi import get_asgi_application
from pathlib import Path

BASE_DIR = Path(__file__).parent

application = BlackNoise(get_asgi_application())
application.add(BASE_DIR / "static", "/static")

示例使用Django,但您可以包装任何ASGI应用程序。

BlackNoise将自动处理添加的前缀下的所有路径,如果文件不存在则返回404错误。文件在服务器启动时添加,这也意味着BlackNoise只知道在那个特定时间点存在的文件。

BlackNoise不会监视添加的文件夹中的更改;如果您添加新文件,则需要重新启动服务器,否则那些文件不会被服务。但它不会缓存文件内容,因此可以直接获取文件更改。

提高性能

BlackNoise的性能不如使用优化过的web服务器,如nginx等。如果应用程序位于缓存反向代理或内容分发网络后面,有时这并不重要。为了进一步支持这种情况,BlackNoise可以配置为使用超远期过期头服务媒体文件,并支持服务压缩资源。

服务预压缩资源

可以通过运行

python -m blacknoise.compress static/

BlackNoise 将尝试使用 gzip 或 brotli(如果提供了 Brotli 库)压缩非二进制文件,并在压缩实际上(显著)减小文件大小且客户端也支持的情况下提供压缩版本。文件将并行压缩以提高完成速度。

设置远期过期头部

可以通过将 immutable_file_test 可调用对象传递给 BlackNoise 构造函数来启用远期过期头部。

def immutable_file_test(path):
    return True  # Enable far-future expiry headers for all files

application = BlackNoise(
    get_asgi_application(),
    immutable_file_test=immutable_file_test,
)

也许您想添加一些其他逻辑,例如检查路径是否包含基于静态文件内容的哈希。这些哈希可以通过 Django 的 ManifestStaticFilesStorage 或通过适当配置如 webpack 等打包器来添加。

许可证

blacknoise 根据 MIT 许可证分发。

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

blacknoise-1.1.0.tar.gz (8.3 kB 查看哈希)

上传时间

构建分布

blacknoise-1.1.0-py3-none-any.whl (6.4 kB 查看哈希)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面