一个简单的两阶段模板渲染应用程序,适用于缓存经过身份验证的请求。
项目描述
一个简单的两阶段模板渲染应用程序,适用于缓存经过身份验证的请求。
如何工作
Adrian Holovaty在这篇博客文章中和Honza Kral之前描述了这种技术。想法是首先渲染模板,其中某些块被标记为“阶段”,这样它们将不会被渲染,并且将保持有效的模板代码,可以在第二次传递时进行渲染。
第二次传递从缓存中检索部分渲染的模板,并对其执行第二次渲染,使用RequestContext为模板提供特定于用户的上下文。这通过绕过需要使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY设置的需要,使得生成具有特定于用户内容的页面变得非常快。
本实现使用一个秘密分隔符,使其能够抵御模板代码注入漏洞的可能性,因为它只将任何给定的文本通过模板解析器传递一次。分阶段的块还可以包含缓存的上下文。
基本实现
django-phased 包含一个模板标签 phased,它定义了在第二阶段要解析的块。中间件类 PhasedRenderMiddleware 处理响应以渲染第一次渲染中跳过的部分。
还包括一个特殊的 UpdateCacheMiddleware 子类,当它更新缓存时会从响应中删除“Vary: Cookie”头。如果用标准 UpdateCacheMiddleware 替换它,将防止缓存中间件根据 Cookie 变更缓存键,从而启用认证会话中页面的缓存。
项目详情
关闭
django-phased-0.6.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | a48b3b314ceb18a5439df3b6ce6331dcf6635b2b77a54a0e823ae5d1b6dc84a4 |
|
MD5 | 44a9f05318b2283669f6eda560896c30 |
|
BLAKE2b-256 | edcc19b2988e29588fd9aaa281c7e93b194f7f38bce5e725a011a08bb03c9d7c |