在整个程序中访问金字塔设置

问题描述 投票:0回答:1

我有一个金字塔API,基本上有三层。

  1. 查看->验证请求和响应
  2. Controller->执行业务逻辑并从数据库中检索内容。
  3. 服务->拨打外部第三方服务。

服务是每个外部API的类,其中将包含身份验证数据之类的内容。这应该是一个类属性,因为它不会随每个实例更改。但是,我不知道如何使它成为一个类属性。

相反,我在视图request.registry.settings中提取设置,将其传递给控制器​​,然后控制器将其向下传递给服务的init()。这似乎是不必要的。

显然,我可以用代码对它们进行硬编码,但这是一个糟糕的主意。

还有更好的方法吗?

python pyramid
1个回答
0
投票

金字塔本身不使用全局变量,这是当您要求设置在类级别或模块级别的属性中可用时的要求。对于实例级的东西,您只需从视图或配置中将金字塔的设置传递到实例中即可。

要解决此问题,您始终可以在配置时将Pyramid应用程序的数据传递到模型中。例如,在main中,只需拉settings = config.get_settings()并将其中的一些传递到需要的位置即可。通常,您要尝试一次在配置时传递信息,而不是一直从视图层传递信息。

最后,在不使用类级别或模块级别属性的情况下,执行此操作的一种好方法是在应用程序中注册服务的实例。 pyramid_services库提供了一种解决方案,但其基本思想是为您的应用实例化服务实例,将其添加到金字塔注册表config.registry.foo = ...中,然后您可以传递设置。稍后在您的查看代码中,您可以使用request.registry.foo从那里获取服务,并且已经为您设置了!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.