擅长:python、mysql、java
<p>基本上,如果您没有访问请求对象的权限,那么您在金字塔中“偏离轨道”。为了以金字塔的方式进行工作,我们制作组件并确定它们在金字塔生命周期中的位置,并且它们应该始终能够直接访问注册表(ZCA)和请求中的一个或两个。在</p>
<p>如果您所做的不适合请求生命周期,那么它可能是应该在服务器启动时实例化的,通常是在您的<strong>init</strong>.py中生成并填充配置器(我们对注册表的访问)。不要害怕以后使用注册表允许其他组件获取“伪全局”的东西。因此,您可能想为您的东西创建某种工厂,在启动代码中调用该工厂,也许将对注册表的引用作为参数传入,然后将对象附加到注册表。如果您的组件需要与请求生命周期代码接口,请为其提供一个将request作为参数的方法。稍后,这个对象需要的任何东西都可以从注册表中获取,这个对象需要的任何东西都可以通过注册表或请求来完成。在</p>
<p>你完全可以使用另一个答案中的黑客攻击来获取当前的全局注册表,但需要这样做是一种代码气味,你可以找到一个更好的设计来消除它。在</p>
<p>服务器启动代码中的伪代码示例:</p>
<pre><code># in in the init block where our Configurator has been built
from myfactory import MyFactory
registry.my_component = MyFactory(config.registry)
# you can now get at my_component from anywhere in a pyramid system
</code></pre>
<p>您的组件:</p>
^{pr2}$
<p>金字塔视图是这样工作的。它们实际上是请求和上下文的ZCA多适配器。它们的<em>工厂</em>在注册表中注册,然后当视图查找过程启动时,工厂将实例化一个视图作为param传入请求。在</p>