Django的子资源完整性
项目描述
Django SRI
子资源完整性 for Django.
安装
pip install django-sri
将sri添加到您的INSTALLED_APPS。
使用
模板标签
注意: 默认情况下,当DEBUG为True时,不输出完整性散列,因为静态文件在本地开发期间会发生变化。要覆盖此设置,将USE_SRI设置为True。
django-sri主要是通过模板标签使用的
{% load sri %}
{% sri_static "index.js" %} <!-- Will output "<script src='/static/index.js' integrity='sha256-...'></script>" -->
{% sri_static "index.css" %} <!-- Will output "<link rel='stylesheet' href='/static/index.css' integrity='sha256-...'/>" -->
为了性能,文件的散列被缓存到Django的缓存框架中。它将尝试使用“sri”缓存,如果不存在,则回退到“default”。缓存键是文件路径的哈希值,以十六进制形式在指定算法中。缓存将保持为DEFAULT_TIMEOUT设置的时长。
算法
SRI标准支持3种算法:sha256、sha384和sha512。默认情况下,使用SHA256。要覆盖此设置,向sri模板标签(或特定的)提供额外的algorithm参数。
{% load sri %}
{% sri_static "index.js" algorithm="sha512" %} <!-- Will output "<script src='/static/index.js' integrity='sha512-...'></script>" -->
默认算法可以通过将 SRI_ALGORITHM 设置为所需的算法来更改。
附加属性
要将附加属性添加到输出标签(如 async / defer),请将这些属性作为模板标签的附加参数指定。
{% load sri %}
{% sri_static "index.js" 'defer' 'async'%}
{% sri_static "index.woff2" preload as="font" %}
仅完整性值
要仅检索完整性哈希(integrity 属性的内容),可以使用 {% sri_integrity_static %} 标签,该标签支持与其他标签相同的参数。
{% load sri %}
{% sri_integrity_static "index.js" "sha512" %} <!-- Will output "sha512-..." -->
支持的文件
对于自动标签输出,以下文件被支持
.js.css
未知扩展名将发出一个具有 URL 作为 href 属性的 link 标签。
sri_integrity_static 不受此限制的影响。
API
from pathlib import Path
from sri import calculate_integrity, calculate_integrity_of_static, Algorithm
calculate_integrity(Path("/path/to/myfile.txt")) # "sha256-..."
calculate_integrity_of_static("index.js") # "sha256-..."
calculate_integrity_of_static("index.js", Algorithm.SHA512) # "sha512-..."
“这与 whitenoise 或类似功能兼容吗?”
是的。 django-sri 以与内置 static 模板标签相同的方式输出静态文件 URL。这意味着输出正确的缓存破损 URL。
当使用清单 STATICFILES_STORAGE 时,django-sri 将自动检索已哈希和后处理的文件,而不是原始文件。
项目详情
下载文件
下载适合您平台的自定义文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。