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构建的金字塔应用程序可以通过以下命令调用−
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应用程序对象main的名称。它被声明在textproj包的 __init__.py 文件中(在testproj项目文件夹内)。本节包含其他启动时间的配置设置。
例如,”pyramid.includes “设置指定了要包含在运行时的包。在上面的例子中, debugtoolbar 包被包含在内,这样当点击Pyramid标志时,调试面板会被激活。我们已经在前面的章节中看到了它的功能。
我们还看到,在这个应用程序中使用的数据库的URL也已经被指定。
[server:main]部分指定了一个WSGI服务器的配置,该服务器监听TCP端口6543。它被配置为只监听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