Python Pyramid 简明教程
Python Pyramid - Project Structure
如前所述,外部 testproj 文件夹包含 testproj 和 test 包。此外,它还有其他用于描述、运行和测试应用程序的文件。这些文件是 −
-
MANIFEST.in 包含要包含在包源分发中的文件列表。
-
development.ini 是 PasteDeploy 配置文件,可用用于在开发期间执行应用程序。
-
production.ini 是 PasteDeploy 配置文件,可用用于在生产配置中执行应用程序。
-
pytest.ini 是用于运行测试的配置文件。
-
setup.py 是用于测试和分发应用程序的标准 Setuptools setup.py 文件。
-
testing.ini 是用于执行应用程序的测试的配置文件。
".ini" 文件是 Cookiecutter 实用程序用来生成 Pyramid 应用程序结构的配置。这些文件使用一个称为 PasteDeploy 的系统,该系统由 Ian Bicking 开发。此库会随 Pyramid 自动安装。
尽管可以在没有 PasteDeploy 支持的情况下开发 Pyramid 应用程序,但它提供了一种启动、调试和测试应用程序的标准化方法。
预定义的设置从配置文件中读取(带有 .ini 扩展名)。这些文件主要包含应用程序配置设置、服务器设置和记录设置。
development.ini
如前所示,使用 Cookiecutter 构建的 Pyramid 应用程序由以下命令调用 −
pserve development.ini
development.ini 中包含应用程序的 PasteDeploy 配置规范。该文件中的配置规范包含各种部分,如 [app:main]、[server:main]、[loggers] 等。
最重要的部分是 [app:main]。它指定应用程序的起始点。
[app:main]
use = egg:testproj
pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
pyramid.includes = pyramid_debugtoolbar
sqlalchemy.url = sqlite:///%(here)s/testproj.sqlite
retry.attempts = 3
第一个条目“use = egg:testproj”表示 Pyramid WSGI 应用程序对象主函数的名称。它在 textproj 包的 init.py 文件(位于 testproj 项目文件夹中)中声明。此部分包含其它启动时间配置设置。
例如,“pyramid.includes”设置指定在运行时要包含的包。在上述示例中,包含 debugtoolbar 包,以便在单击 Pyramid 徽标时激活调试面板。我们在前一节中已经了解它的作用。
我们还会看到,此应用程序中要使用的数据库的 URL 也已指定。
[server:main] 部分指定监听在 TCP 端口 6543 上的 WSGI 服务器的配置。它配置为仅监听 localhost (127.0.0.1)。
[server:main]
use = egg:waitress#main
listen = localhost:6543
其它各种与日志记录相关的部分使用 Python 的日志记录库。这些“.ini”文件部分传递给日志记录模块的配置文件配置引擎。
production.ini
当应用程序在生产模式下部署时,此文件用于提供应用程序,而不是“development.ini”。这两个文件类似。但是,“production.ini”中禁用了调试工具栏,禁用了重新加载选项,并关闭了调试选项。
下面是一个经过精简的典型“production.ini”文件版本 −
[app:main]
use = egg:testproj
pyramid.reload_templates = false
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
sqlalchemy.url = sqlite:///%(here)s/testproj.sqlite
retry.attempts = 3
[pshell]
setup = testproj.pshell.setup
[alembic]
script_location = testproj/alembic
file_template = %%(year)d%%(month).2d%%(day).2d_%%(rev)s
[server:main]
use = egg:waitress#main
listen = *:6543
[loggers]
keys = root, testproj, sqlalchemy, alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
[logger_testproj]
level = WARN
handlers =
qualname = testproj
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = WARN
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s