用于模板渲染的 Twisted Web 服务器中的自定义文件扩展名处理程序
Posted
技术标签:
【中文标题】用于模板渲染的 Twisted Web 服务器中的自定义文件扩展名处理程序【英文标题】:Custom filename extension handler in Twisted webserver for template rendering 【发布时间】:2018-09-15 16:10:28 【问题描述】:我有一个扭曲的 Web 服务器,其中包含在 htdocs/... 层次结构中提供的静态文件。我想在返回之前将所有 .template 文件传递给 mako/jinja,但直接返回非模板化的静态文件。有没有人对最好的方法有任何见解?我想避免将它们放在特定目录中,而是将它们留在自然文件层次结构中。
【问题讨论】:
【参考方案1】:您可以编写一个“处理器”,然后指导 Twisted Web 使用它。例如,如果您使用twistd web
运行您的网络服务器:
twistd web --processor template=yourlib.JinjaProcessor
如果您不使用twistd web
,则可以通过填充代表.template
文件的父目录的twisted.web.static.File
的processors
属性来使用此功能。
处理器只是一个可调用对象,它接受 FilePath
并返回 IResource
提供程序。
【讨论】:
这可行,但我不知道如何使 index.html 成为 index.mako(如果存在),因此处理 / 变得不可能static.File
也有一个 indexNames
属性。 indexNames = ["index.mako"]
可能会这样做(或者如果您愿意,您可以附加该名称而不是替换其他名称)。此外,您可以将 ignoredExts
包含在 ".mako"
中,然后对 index
的请求将找到 index.mako
(如果您希望在 URL 中显示明确的索引段)。【参考方案2】:
我尝试使用文件处理器,但最终我继承了 static.File 并覆盖了 render() 方法。唯一的复杂情况是我没有意识到我的类型(MakoFile)会为每个孩子实例化——这有时会导致我失去本地的 mako 上下文。最后我意识到 File 类的每个实例都有一个 Registry() 传下来。
所以我将 Registry 子类化为 MakoRegistry,将我的模板查找和上下文粘贴在那里,并将其推送到***对象中。到目前为止,这是有效的。
【讨论】:
以上是关于用于模板渲染的 Twisted Web 服务器中的自定义文件扩展名处理程序的主要内容,如果未能解决你的问题,请参考以下文章
XCTF-攻防世界CTF平台-Web类——12Web_python_template_injection(SSTI服务器模板注入Flask框架之Jinja2模板渲染引擎)
Class 17 - 2 动态渲染页面爬取 — Splash