Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4

          [Pylons] 默認項目結構

          Posted on 2009-01-26 12:33 laogao 閱讀(998) 評論(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。


          主站蜘蛛池模板: 荔波县| 新河县| 颍上县| 壶关县| 崇文区| 革吉县| 潍坊市| 朝阳市| 多伦县| 女性| 衡东县| 离岛区| 酒泉市| 宽甸| 四子王旗| 衢州市| 前郭尔| 平乐县| 大新县| 青冈县| 龙游县| 太康县| 精河县| 耒阳市| 白朗县| 土默特左旗| 克山县| 抚远县| 民县| 赤水市| 准格尔旗| 临朐县| 桐乡市| 即墨市| 抚州市| 罗田县| 岱山县| 雷山县| 曲阳县| 红桥区| 杂多县|