Python Pyramid - 项目结构
如前所述,外部 testproj 文件夹包含 testproj 和测试包。 此外,它还有其他用于描述、运行和测试应用程序的文件。 这些文件是 −
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] 等。
最重要的部分id [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 应用程序对象 main 的名称。 它在 textproj 包的 __init__.py 文件中声明(在 testproj 项目文件夹内)。 此部分包含其他启动时间配置设置。
例如,"pyramid.includes"设置指定要包含在运行时中的包。 在上面的示例中,包含了 debugtoolbar 包,以便在单击 Pyramid 徽标时激活调试面板。 我们在前面的部分已经看到了它的功能。
我们还看到,还指定了要在该应用程序中使用的数据库的 URL。
[server:main] 部分指定监听 TCP 端口 6543 的 WSGI 服务器的配置。它被配置为只监听本地主机 (127.0.0.1)。
[server:main] use = egg:waitress#main listen = localhost:6543
其他各种日志相关部分使用 Python 的日志库。 这些".ini"文件部分被传递到日志记录模块的配置文件配置引擎。
production.ini
在生产模式下部署应用程序时,此文件用于为应用程序提供服务,而不是"development.ini"。 这两个文件很相似。 但是,在"production.ini"中,调试工具栏被禁用,reload 重新加载选项被禁用并关闭调试选项。
这是典型"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