环境变量和 .ini
文件设置¶
Pyramid 行为可以通过操作系统环境变量和 .ini
配置文件应用程序节设置。环境变量和配置文件设置的含义重叠。
备注
如果存在与环境变量含义相同的配置文件设置,并且在应用程序启动时两者都存在,则环境变量设置优先。
术语“配置文件设置名称”是指 .ini
应用程序的配置。本章中记录的配置文件设置名称保留用于 Pyramid 使用。您不应该使用它们来指示特定于应用程序的配置设置。
重新加载模板¶
如果该值为真,则在不重新启动应用程序的情况下,只要修改模板,就会自动重新加载模板,因此您可以看到对模板的更改在开发过程中立即生效。此标志对变色龙和Mako模板以及大多数第三方模板呈现扩展都有意义。
环境变量名 |
配置文件设置名称 |
---|---|
|
|
重新加载资产¶
当该值为真时,不要缓存任何资产文件数据。
参见
也见 压倒一切的资产 .
环境变量名 |
配置文件设置名称 |
---|---|
|
|
备注
为了向后兼容,别名可用于配置资产重新加载: PYRAMID_RELOAD_RESOURCES
(EnVaR)和 pyramid.reload_resources
(配置文件)。
调试未找到错误¶
打印视图相关 NotFound
当此值为真时,调试发送到stderr的消息。
参见
也见 NotFound 错误 .
环境变量名 |
配置文件设置名称 |
---|---|
|
|
调试路由匹配¶
打印与相关的调试消息 url dispatch 此值为真时路由匹配。
参见
也见 调试路由匹配 .
环境变量名 |
配置文件设置名称 |
---|---|
|
|
阻止HTTP缓存¶
防止 http_cache
当此值为真时,查看配置参数在该进程中是否具有全局效果。不会通过设置与HTTP缓存相关的响应头 Pyramid http_cache
如果为真,则查看配置功能。
参见
也见 影响HTTP缓存 .
环境变量名 |
配置文件设置名称 |
---|---|
|
|
防止缓存总线¶
防止 cachebust
当该值为真时,静态视图配置参数在此进程中全局具有任何效果。如果为真,则不会配置或使用缓存buster。
在 1.6 版本加入.
参见
也见 缓存中断 .
环境变量名 |
配置文件设置名称 |
---|---|
|
|
全部调试¶
打开所有 debug*
设置。
环境变量名 |
配置文件设置名称 |
---|---|
|
|
全部重装¶
打开所有 reload*
设置。
环境变量名 |
配置文件设置名称 |
---|---|
|
|
默认区域设置名称¶
此处提供的值用作默认区域设置名称,当 locale negotiator 未注册。
参见
也见 与本地化相关的部署设置 .
环境变量名 |
配置文件设置名称 |
---|---|
|
|
包括包裹¶
pyramid.includes
指示应用程序包含其他包。使用该设置等同于使用 pyramid.config.Configurator.include()
方法。
配置文件设置名称 |
---|
|
分配给的值 pyramid.includes
应该是序列。序列可以采用几种不同的形式。
它可以是一根绳子。
如果是字符串,则包名称可以用空格分隔:
package1 package2 package3
包名称也可以用回车分隔:
package1 package2 package3
它可以是一个python列表,其中的值是字符串:
['package1', 'package2', 'package3']
序列中的每个值都应该是 dotted Python name .
pyramid.includes
vs. pyramid.config.Configurator.include()
¶
有两种方法包括包装: pyramid.includes
和 pyramid.config.Configurator.include()
. 本节解释了它们的等效性。
使用PasteDeploy¶
使用以下内容 pyramid.includes
在PasteDeploy中设置 .ini
应用程序中的文件:
[app:main]
pyramid.includes = pyramid_debugtoolbar
pyramid_tm
相当于在配置代码中使用以下语句:
1from pyramid.config import Configurator
2
3def main(global_config, **settings):
4 config = Configurator(settings=settings)
5 # ...
6 config.include('pyramid_debugtoolbar')
7 config.include('pyramid_tm')
8 # ...
可以同时使用两种形式,也可以两者兼用。
普通 Python¶
使用以下内容 pyramid.includes
在纯Python金字塔应用程序中设置:
1from pyramid.config import Configurator
2
3if __name__ == '__main__':
4 settings = {'pyramid.includes':'pyramid_debugtoolbar pyramid_tm'}
5 config = Configurator(settings=settings)
相当于在配置代码中使用以下语句:
1from pyramid.config import Configurator
2
3if __name__ == '__main__':
4 settings = {}
5 config = Configurator(settings=settings)
6 config.include('pyramid_debugtoolbar')
7 config.include('pyramid_tm')
可以同时使用两种形式,也可以两者兼用。
显式吐温结构¶
此值允许您执行显式 tween 在您的配置中排序。Tweens是附加组件作者用来扩展金字塔的代码位。它们形成一个链条,需要订购。
理想情况下,您不需要使用 pyramid.tweens
设置。当注册tween的附加包被“包括”时,tween通常被“隐式”地排序和包含。当您指定一个 pyramid.includes
在配置中或调用时进行设置 pyramid.config.Configurator.include()
.
包含的附加组件的作者在包含它们的包时向金字塔提供“隐式”两种配置之间的排序提示。然而,隐含的二元排序只是最好的努力。金字塔将尽可能利用附加作者提供的提示来提供一个隐含的吐温顺序,但因为它只是尽最大努力,如果需要非常精确的吐温顺序,唯一可靠的方法是使用一个明确的吐温顺序。您可能需要检查您的吐温订购(参见 ptweens :显示“Tweens” )并添加 pyramid.tweens
附加组件作者要求的配置值。
配置文件设置名称 |
---|
|
分配给的值 pyramid.tweens
应该是序列。序列可以采用几种不同的形式。
它可以是一根绳子。
如果是字符串,可以用空格分隔两个名称:
pkg.tween_factory1 pkg.tween_factory2 pkg.tween_factory3
中间名也可以用回车分隔:
pkg.tween_factory1 pkg.tween_factory2 pkg.tween_factory3
它可以是一个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
相当于在配置代码中使用以下语句:
1from pyramid.config import Configurator
2
3def main(global_config, **settings):
4 settings['pyramid.tweens'] = [
5 'pyramid_debugtoolbar.toolbar.tween_factory',
6 'pyramid.tweebs.excview_tween_factory',
7 'pyramid_tm.tm_tween_factory',
8 ]
9 config = Configurator(settings=settings)
可以同时使用两种形式,也可以两者兼用。
实例¶
假设您的配置文件名为 MyProject.ini
,并且有一个部分表示名为 [app:main]
在代表您的 Pyramid 应用。上述“配置文件设置名称”列中记录的配置文件设置将进入 [app:main]
部分。下面是这样一个部分的示例:
1[app:main]
2use = egg:MyProject
3pyramid.reload_templates = true
4pyramid.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_templates
和 reload_assets
¶
两者之间的区别 pyramid.reload_assets
和 pyramid.reload_templates
有点微妙。模板本身也由 Pyramid 作为资产文件(与其他静态文件一起),因此区别可能会令人困惑。阅读很有帮助 压倒一切的资产 对于一般资产的一些上下文。
什么时候? pyramid.reload_templates
是真的, Pyramid 利用底层模板系统检查单个模板文件的文件修改的能力。什么时候? pyramid.reload_templates
是真的,但是 pyramid.reload_assets
是 not 是,模板文件名由 pkg_resources
包(由资产解析在hood下使用)由缓存 Pyramid 在第一次请求时。对同一模板文件的后续请求将返回缓存的模板文件名。基础模板系统检查每个请求对这个特定文件的修改。设置 pyramid.reload_templates
到 True
不会显著影响性能(尽管它仍然不应该在生产中使用,因为它有一些效果)。
然而,何时 pyramid.reload_assets
是真的, Pyramid 不会缓存模板文件名,这意味着您可以看到在每次更改后不重新启动服务器的情况下更改模板的重写资产目录内容的效果。对同一模板文件的后续请求可能会基于被重写资产目录的当前状态返回不同的文件名。设置 pyramid.reload_assets
到 True
影响性能 戏剧性地 ,将每个模板渲染的速度降低一个数量级。但是,当在重写的资产目录中移动文件时,启用它很方便。 pyramid.reload_assets
使系统 非常缓慢 使用模板时。从不设置 pyramid.reload_assets
到 True
在生产系统上。
添加自定义设置¶
有时,您可能需要向应用程序添加自定义设置。以下是如何:
如果使用
.ini
文件,更改.ini
文件,将设置添加到[app:foo]
表示金字塔应用程序的部分。例如:[app:main] # .. other settings debug_frobnosticator = True
在
main()
函数,它表示创建Pyramid WSGi应用程序的位置,预计您将获得此键/值对作为设置,并执行任何必要的类型转换。如果对自定义值进行了任何类型转换,请将转换后的值重置为
settings
词典 之前 你把字典当作settings
到 Configurator . 例如: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']