环境变量和 .ini 文件设置

Pyramid 行为可以通过操作系统环境变量和 .ini 配置文件应用程序节设置。环境变量和配置文件设置的含义重叠。

注解

如果存在与环境变量含义相同的配置文件设置,并且在应用程序启动时两者都存在,则环境变量设置优先。

术语“配置文件设置名称”是指 .ini 应用程序的配置。本章中记录的配置文件设置名称保留用于 Pyramid 使用。您不应该使用它们来指示特定于应用程序的配置设置。

重新加载模板

如果该值为真,则在不重新启动应用程序的情况下,只要修改模板,就会自动重新加载模板,因此您可以看到对模板的更改在开发过程中立即生效。此标志对变色龙和Mako模板以及大多数第三方模板呈现扩展都有意义。

环境变量名 配置文件设置名称
PYRAMID_RELOAD_TEMPLATES
pyramid.reload_templates
reload_templates

重新加载资产

当该值为真时,不要缓存任何资产文件数据。

参见

也见 压倒一切的资产 .

环境变量名 配置文件设置名称
PYRAMID_RELOAD_ASSETS pyramid.reload_assets or reload_assets

注解

为了向后兼容,别名可用于配置资产重新加载: PYRAMID_RELOAD_RESOURCES (EnVaR)和 pyramid.reload_resources (配置文件)。

调试授权

当此值为真时,将视图授权失败和成功信息打印到stderr。

参见

也见 调试视图授权失败 .

环境变量名 配置文件设置名称
PYRAMID_DEBUG_AUTHORIZATION pyramid.debug_authorization or debug_authorization

调试未找到错误

打印视图相关 NotFound 当此值为真时,调试发送到stderr的消息。

参见

也见 NotFound 错误 .

环境变量名 配置文件设置名称
PYRAMID_DEBUG_NOTFOUND pyramid.debug_notfound or debug_notfound

调试路由匹配

打印与相关的调试消息 url dispatch 此值为真时路由匹配。

参见

也见 调试路由匹配 .

环境变量名 配置文件设置名称
PYRAMID_DEBUG_ROUTEMATCH pyramid.debug_routematch or debug_routematch

阻止HTTP缓存

防止 http_cache 当此值为真时,查看配置参数在该进程中是否具有全局效果。不会通过设置与HTTP缓存相关的响应头 Pyramid http_cache 如果为真,则查看配置功能。

参见

也见 影响HTTP缓存 .

环境变量名 配置文件设置名称
PYRAMID_PREVENT_HTTP_CACHE pyramid.prevent_http_cache or prevent_http_cache

防止缓存总线

防止 cachebust 当该值为真时,静态视图配置参数在此进程中全局具有任何效果。如果为真,则不会配置或使用缓存buster。

1.6 新版功能.

参见

也见 缓存中断 .

环境变量名 配置文件设置名称
PYRAMID_PREVENT_CACHEBUST pyramid.prevent_cachebust or prevent_cachebust

全部调试

打开所有 debug* 设置。

环境变量名 配置文件设置名称
PYRAMID_DEBUG_ALL pyramid.debug_all or debug_all

全部重装

打开所有 reload* 设置。

环境变量名 配置文件设置名称
PYRAMID_RELOAD_ALL pyramid.reload_all or reload_all

默认区域设置名称

此处提供的值用作默认区域设置名称,当 locale negotiator 未注册。

环境变量名 配置文件设置名称
PYRAMID_DEFAULT_LOCALE_NAME pyramid.default_locale_name or default_locale_name

包括包裹

pyramid.includes 指示应用程序包含其他包。使用该设置等同于使用 pyramid.config.Configurator.include() 方法。

配置文件设置名称
pyramid.includes

分配给的值 pyramid.includes 应该是序列。序列可以采用几种不同的形式。

  1. 它可以是一根绳子。

    如果是字符串,则包名称可以用空格分隔:

    package1 package2 package3
    

    包名称也可以用回车分隔:

    package1
    package2
    package3
    
  2. 它可以是一个python列表,其中的值是字符串:

    ['package1', 'package2', 'package3']
    

序列中的每个值都应该是 dotted Python name .

pyramid.includes vs. pyramid.config.Configurator.include()

有两种方法包括包装: pyramid.includespyramid.config.Configurator.include() . 本节解释了它们的等效性。

使用PasteDeploy

使用以下内容 pyramid.includes 在PasteDeploy中设置 .ini 应用程序中的文件:

[app:main]
pyramid.includes = pyramid_debugtoolbar
                   pyramid_tm

相当于在配置代码中使用以下语句:

1
2
3
4
5
6
7
8
from pyramid.config import Configurator

def main(global_config, **settings):
    config = Configurator(settings=settings)
    # ...
    config.include('pyramid_debugtoolbar')
    config.include('pyramid_tm')
    # ...

可以同时使用两种形式,也可以两者兼用。

普通 Python

使用以下内容 pyramid.includes 在纯Python金字塔应用程序中设置:

1
2
3
4
5
from pyramid.config import Configurator

if __name__ == '__main__':
    settings = {'pyramid.includes':'pyramid_debugtoolbar pyramid_tm'}
    config = Configurator(settings=settings)

相当于在配置代码中使用以下语句:

1
2
3
4
5
6
7
from pyramid.config import Configurator

if __name__ == '__main__':
    settings = {}
    config = Configurator(settings=settings)
    config.include('pyramid_debugtoolbar')
    config.include('pyramid_tm')

可以同时使用两种形式,也可以两者兼用。

显式吐温结构

此值允许您执行显式 tween 在您的配置中排序。Tweens是附加组件作者用来扩展金字塔的代码位。它们形成一个链条,需要订购。

理想情况下,您不需要使用 pyramid.tweens 设置。当注册tween的附加包被“包括”时,tween通常被“隐式”地排序和包含。当您指定一个 pyramid.includes 在配置中或调用时进行设置 pyramid.config.Configurator.include() .

包含的附加组件的作者在包含它们的包时向金字塔提供“隐式”两种配置之间的排序提示。然而,隐含的二元排序只是最好的努力。金字塔将尽可能利用附加作者提供的提示来提供一个隐含的吐温顺序,但因为它只是尽最大努力,如果需要非常精确的吐温顺序,唯一可靠的方法是使用一个明确的吐温顺序。您可能需要检查您的吐温订购(参见 ptweens :显示“Tweens” )并添加 pyramid.tweens 附加组件作者要求的配置值。

配置文件设置名称
pyramid.tweens

分配给的值 pyramid.tweens 应该是序列。序列可以采用几种不同的形式。

  1. 它可以是一根绳子。

    如果是字符串,可以用空格分隔两个名称:

    pkg.tween_factory1 pkg.tween_factory2 pkg.tween_factory3
    

    中间名也可以用回车分隔:

    pkg.tween_factory1
    pkg.tween_factory2
    pkg.tween_factory3
    
  2. 它可以是一个python列表,其中的值是字符串:

    ['pkg.tween_factory1', 'pkg.tween_factory2', 'pkg.tween_factory3']
    

序列中的每个值都应该是 dotted Python name .

PasteDeploy配置与纯python配置

使用以下内容 pyramid.tweens 在PasteDeploy中设置 .ini 应用程序中的文件:

[app:main]
pyramid.tweens = pyramid_debugtoolbar.toolbar.tween_factory
                 pyramid.tweens.excview_tween_factory
                 pyramid_tm.tm_tween_factory

相当于在配置代码中使用以下语句:

1
2
3
4
5
6
7
8
9
from pyramid.config import Configurator

def main(global_config, **settings):
    settings['pyramid.tweens'] = [
        'pyramid_debugtoolbar.toolbar.tween_factory',
        'pyramid.tweebs.excview_tween_factory',
        'pyramid_tm.tm_tween_factory',
    ]
    config = Configurator(settings=settings)

可以同时使用两种形式,也可以两者兼用。

实例

假设您的配置文件名为 MyProject.ini ,并且有一个部分表示名为 [app:main] 在代表您的 Pyramid 应用。上述“配置文件设置名称”列中记录的配置文件设置将进入 [app:main] 部分。下面是这样一个部分的示例:

1
2
3
4
[app:main]
use = egg:MyProject
pyramid.reload_templates = true
pyramid.debug_authorization = true

您还可以使用环境变量来实现记录的设置的相同目的。例如,您可以启动 Pyramid 使用以下命令行的应用程序:

PYRAMID_DEBUG_AUTHORIZATION=1 PYRAMID_RELOAD_TEMPLATES=1 \
    $VENV/bin/pserve MyProject.ini

如果以这种方式启动应用程序, Pyramid 应用程序的行为方式与您在 [app:main] 应用程序的部分 .ini 文件。

如果你想全力以赴 debug 设置(以 pyramid.debug_ )一下子,你就可以使用 PYRAMID_DEBUG_ALL=1 作为环境变量设置或可以使用 pyramid.debug_all=true 在配置文件中。请注意,这不会影响不以开头的设置 pyramid.debug_*pyramid.reload_templates .

如果你想全力以赴 pyramid.reload 设置(以 pyramid.reload_ )一下子,你就可以使用 PYRAMID_RELOAD_ALL=1 作为环境变量设置或可以使用 pyramid.reload_all=true 在配置文件中。请注意,这不会影响不以开头的设置 pyramid.reload_*pyramid.debug_notfound .

注解

通过环境变量指定配置设置通常在开发过程中最有用,在开发过程中,您可能希望增加或覆盖配置文件中更永久的设置。这很有用,因为许多重新加载和调试设置可能会影响性能或安全性(即泄漏),使它们在生产环境中不受欢迎。

理解 reload_templatesreload_assets

两者之间的区别 pyramid.reload_assetspyramid.reload_templates 有点微妙。模板本身也由 Pyramid 作为资产文件(与其他静态文件一起),因此区别可能会令人困惑。阅读很有帮助 压倒一切的资产 对于一般资产的一些上下文。

什么时候? pyramid.reload_templates 是真的, Pyramid 利用底层模板系统检查单个模板文件的文件修改的能力。什么时候? pyramid.reload_templates 是真的,但是 pyramid.reload_assetsnot 是,模板文件名由 pkg_resources 包(由资产解析在hood下使用)由缓存 Pyramid 在第一次请求时。对同一模板文件的后续请求将返回缓存的模板文件名。基础模板系统检查每个请求对这个特定文件的修改。设置 pyramid.reload_templatesTrue 不会显著影响性能(尽管它仍然不应该在生产中使用,因为它有一些效果)。

然而,何时 pyramid.reload_assets 是真的, Pyramid 不会缓存模板文件名,这意味着您可以看到在每次更改后不重新启动服务器的情况下更改模板的重写资产目录内容的效果。对同一模板文件的后续请求可能会基于被重写资产目录的当前状态返回不同的文件名。设置 pyramid.reload_assetsTrue 影响性能 戏剧性地 ,将每个模板渲染的速度降低一个数量级。但是,当在重写的资产目录中移动文件时,启用它很方便。 pyramid.reload_assets 使系统 非常缓慢 使用模板时。从不设置 pyramid.reload_assetsTrue 在生产系统上。

添加自定义设置

有时,您可能需要向应用程序添加自定义设置。以下是如何:

  • 如果使用 .ini 文件,更改 .ini 文件,将设置添加到 [app:foo] 表示金字塔应用程序的部分。例如:

    [app:main]
    # .. other settings
    debug_frobnosticator = True
    
  • main() 函数,它表示创建Pyramid WSGi应用程序的位置,预计您将获得此键/值对作为设置,并执行任何必要的类型转换。

    如果对自定义值进行了任何类型转换,请将转换后的值重置为 settings 词典 之前 你把字典当作 settingsConfigurator . 例如:

    def main(global_config, **settings):
        # ...
        from pyramid.settings import asbool
        debug_frobnosticator = asbool(settings.get(
            'debug_frobnosticator', 'false'))
        settings['debug_frobnosticator'] = debug_frobnosticator
        config = Configurator(settings=settings)
    

    注解

    尤其重要的是你变异了 settings 带有变量转换版本的字典 之前 将其传递给配置器:配置器将 copy 属于 settings 不使用你直接通过的那个。

  • 当创建 includeme 稍后将添加到应用程序配置中的函数,您可以访问 settings 字典通过实例 Configurator 它作为唯一的参数传递给函数。例如:

def includeme(config):
    settings = config.registry.settings
    debug_frobnosticator = settings['debug_frobnosticator']
  • 在需要访问新设置值的运行时代码中,在 registry.settings 字典和使用它。在 view 代码(或任何其他可以访问请求的代码),最简单的方法是通过 request.registry.settings . 例如:

    settings = request.registry.settings
    debug_frobnosticator = settings['debug_frobnosticator']
    

    如果您希望使用无法访问请求的代码中的值,并且希望使用该值,则需要使用 pyramid.threadlocal.get_current_registry() API获取当前注册表,然后请求其 settings 属性。例如:

    registry = pyramid.threadlocal.get_current_registry()
    settings = registry.settings
    debug_frobnosticator = settings['debug_frobnosticator']