Posted on 2009-01-26 12:33
laogao 閱讀(991)
評論(0) 編輯 收藏 所屬分類:
On Python
大家新年好!
在
前一篇隨筆中,大家了解了什么是Pylons,有哪些特點,今天筆者繼續給介紹默認生成的項目結構。
通過Paste創建新的Pylons應用很簡單,就是一句"paster create -t pylons [應用名]"命令,其中"-t pylons"或者全稱"--template=pylons",用以告訴Paste我們新建的項目,將是一個Pylons應用,或者說,從一個預定義好的Pylons默認項目模板生成。如果你愿意,你也可以自己來制作新的模板以符合需要。"paster create --list-templates"可以查看當前可用的模板。
假定我們新建的Pylons項目名稱為NewApp,那么執行"paster create -t pylons NewApp"后,我們將得到一個新的NewApp目錄,其中包含一個docs目錄(文檔)、一個newapp目錄(代碼)、一個NewApp.egg-info目錄(元數據)和一些頂級配置文件。
在開發過程中,我們經常會用到的是代碼目錄(這里是newapp)和位于項目根目錄下的development.ini和test.ini文件了。注意這里newapp的大小寫,Pylons在生成項目的時候,不論你指定的項目名稱大小寫是怎樣,這里會自動.lower()轉小寫,只有項目頂級路徑和egg信息會保留原始大小寫,筆者認為這更加符合Web應用的nature。
代碼目錄下包括config、controllers、lib、model、public、templates和tests子目錄,分別用于存放配置(如環境、中間件、路徑查找邏輯)、控制器(處理請求)、全局輔助代碼(全局變量、helpers等)、模型(后臺數據訪問)、靜態頁面/媒體文件、頁面模板和測試代碼。
最后說說ini文件:默認生成的development.ini和test.ini顧名思義分別對應開發和測試需要的基本配置,我們可以通過修改相應的參數配置來指定具體設定,如服務器IP和端口、數據庫連接、日志等。看到這里你也許會問,那么產品環境呢?答案是默認沒有生成,你可以從development.ini修改成需要的產品環境配置,也可以通過paster make-config newapp production.ini生成一個默認的產品環境典型配置。
以development.ini為例,Pylons的ini文件主要包括4個部分的內容:
1- 全局默認參數,如
[DEFAULT]
debug?=?true
#?Uncomment?and?replace?with?the?address?which?should?receive?any?error?reports
#email_to?=?you@yourdomain.com
smtp_server?=?localhost
error_email_from?=?paste@localhost
2- 服務器配置,如
[server:main]
use?=?egg:Paste#http
host?=?127.0.0.1
port?=?5000
3- 應用程序配置,如
[app:main]
use?=?egg:NewApp
full_stack?=?true
cache_dir?=?%(here)s/data
beaker.session.key?=?newapp
beaker.session.secret?=?somesecret
#?If?you'd?like?to?fine-tune?the?individual?locations?of?the?cache?data?dirs
#?for?the?Cache?data,?or?the?Session?saves,?un-comment?the?desired?settings
#?here:
#beaker.cache.data_dir?=?%(here)s/data/cache
#beaker.session.data_dir?=?%(here)s/data/sessions
#?SQLAlchemy?database?URL
sqlalchemy.url?=?sqlite:///%(here)s/development.db
#?WARNING:?*THE?LINE?BELOW?MUST?BE?UNCOMMENTED?ON?A?PRODUCTION?ENVIRONMENT*
#?Debug?mode?will?enable?the?interactive?debugging?tool,?allowing?ANYONE?to
#?execute?malicious?code?after?an?exception?is?raised.
#set?debug?=?false
簡單說明一下,這里的full_stack設置為true表示打開交互式調試和錯誤報告等功能,"%(here)s"會被替換成項目所在路徑,類似相對路徑url中的"."轉絕對路徑,而beaker.*為配置會話相關的設定,如緩存、cookie基本內容等。對于產品環境來說,比較重要的一個配置是"set debug=false",否則一旦出現異常,交互式調試將使得攻擊者能夠執行系統命令。
4- 日志,如
[loggers]
keys?=?root,?routes,?newapp,?sqlalchemy
[handlers]
keys?=?console
[formatters]
keys?=?generic
[logger_root]
level?=?INFO
handlers?=?console
[logger_routes]
level?=?INFO
handlers?=
qualname?=?routes.middleware
#?"level?=?DEBUG"?logs?the?route?matched?and?routing?variables.
[logger_newapp]
level?=?DEBUG
handlers?=
qualname?=?newapp
[logger_sqlalchemy]
level?=?INFO
handlers?=
qualname?=?sqlalchemy.engine
#?"level?=?INFO"?logs?SQL?queries.
#?"level?=?DEBUG"?logs?SQL?queries?and?results.
#?"level?=?WARN"?logs?neither.??(Recommended?for?production?systems.)
[handler_console]
class?=?StreamHandler
args?=?(sys.stderr,)
level?=?NOTSET
formatter?=?generic
[formatter_generic]
format?=?%(asctime)s,%(msecs)03d?%(levelname)-5.5s?[%(name)s]?%(message)s
datefmt?=?%H:%M:%S
OK,這一篇就先講到這兒,下一篇將介紹Routes和controller。