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
将自动检索已哈希和后处理的文件,而不是原始文件。
项目详情
下载文件
下载适合您平台的自定义文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。