【问题标题】:Accessing Pyramid Settings throughout the program在整个程序中访问金字塔设置
【发布时间】:2020-08-31 07:18:10
【问题描述】:

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

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

服务是每个外部 API 的一个类,其中包含身份验证数据等内容。这应该是一个类属性,因为它不会因每个实例而改变。但是,我无法弄清楚如何使其成为类属性。

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

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

有没有更好的办法?

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

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

    为了解决这个问题,您始终可以在配置时为 Pyramid 应用程序将数据传递到模型中。例如,在您的main 中,只需拉动settings = config.get_settings() 并将其中的一些传递到它们需要的位置。作为一般规则,您希望尝试在配置时传递一次,而不是一直从视图层传递。

    最后,一个不使用类级或模块级属性的好方法是在应用中注册服务实例。 pyramid_services 库为此提供了一种方法,但这个想法基本上是为您的应用程序实例化一个服务实例,将其添加到您的金字塔注册表config.registry.foo = ... 并且当您这样做时,您可以传递设置。稍后在您的视图代码中,您可以使用 request.registry.foo 从那里获取服务,它已经为您设置好了!

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2020-05-15
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多