如前所述,外層的 testproj 文件夾包含 testproj 和測試包。此外,它還有用于描述、運行和測試應(yīng)用程序的其他文件。這些文件是 –
.ini “文件是Cookiecutter工具用來生成Pyramid應(yīng)用程序結(jié)構(gòu)的配置。這些文件使用了一個叫做PasteDeploy的系統(tǒng),它是由Ian Bicking開發(fā)的。這個庫是和Pyramid一起自動安裝的。
雖然沒有PasteDeploy的支持也可以開發(fā)Pyramid應(yīng)用程序,但它提供了一種啟動、調(diào)試和測試應(yīng)用程序的標(biāo)準(zhǔn)化方法。
預(yù)定義設(shè)置是從配置文件(擴展名為.ini)中讀取的。這些文件主要包含應(yīng)用程序的配置設(shè)置、服務(wù)器設(shè)置和日志設(shè)置。
如前所述,使用Cookiecutter構(gòu)建的金字塔應(yīng)用程序可以通過以下命令調(diào)用?
pserve development.ini
development.ini包含應(yīng)用程序的PasteDeploy配置規(guī)范。該文件中的配置規(guī)范有不同的部分,如[app:main]、[server:main]、[loggers]等。
最重要的部分是[app:main]。它規(guī)定了應(yīng)用程序的起始點。
[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應(yīng)用程序?qū)ο髆ain的名稱。它被聲明在textproj包的 __init__.py 文件中(在testproj項目文件夾內(nèi))。本節(jié)包含其他啟動時間的配置設(shè)置。
例如,”pyramid.includes “設(shè)置指定了要包含在運行時的包。在上面的例子中, debugtoolbar 包被包含在內(nèi),這樣當(dāng)點擊Pyramid標(biāo)志時,調(diào)試面板會被激活。我們已經(jīng)在前面的章節(jié)中看到了它的功能。
我們還看到,在這個應(yīng)用程序中使用的數(shù)據(jù)庫的URL也已經(jīng)被指定。
[server:main]部分指定了一個WSGI服務(wù)器的配置,該服務(wù)器監(jiān)聽TCP端口6543。它被配置為只監(jiān)聽localhost(127.0.0.1)。
[server:main]
use = egg:waitress#main
listen = localhost:6543
其他各種與日志相關(guān)的部分使用Python的日志庫。這些”.ini “文件部分被傳遞給日志模塊的配置文件配置引擎。
當(dāng)應(yīng)用程序以生產(chǎn)模式部署時,這個文件用來代替 “development.ini “為應(yīng)用程序服務(wù)。這兩個文件都是類似的。然而,在 “production.ini “中,調(diào)試工具欄被禁用,重新加載選項被禁用,并且關(guān)閉了調(diào)試選項。
下面是一個典型的 “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
更多建議: