python類庫26[web2py與MVC]
什么是web2py,請看:python26web[web2py之helloworld]
一 web2py與MVC
web2py鼓勵開發人員將data representation (the model), data presentation (the view) and the application workflow (the controller)分離. web2py的主要設計思想就是MVC,在web2py中一個典型的request流程如下圖:
在上圖中:
1) server可以是web2py內置的server,或者是第三方的server,例如Apache。server使用多線程來處理請求;
2) main是指主要的WSGI應用程序。它執行所有的通用任務和包裝用戶應用。它處理cookies,sessions,transactions,URL routing and reverse routing, and dispatching.
web2py也能夠服務和處理靜態文件如果web server沒有處理。
1)Models,Views和Controller組件構成了用戶的應用;
2)多個應用可以被寄宿在同一個web2py實例中;
3)虛線箭頭代表了與數據庫的通信??梢酝ㄟ^純SQL或web2py的Database Abstraction Layer(DAL)來執行數據庫操作,但是推薦使用DAL來保持數據庫的操作獨立于特定的數據庫類型;
4)分發器將request的URL轉化為controller中的函數調用。函數的輸出可以是字符串或dictionary字典。在dictionary中的數據將被view渲染。如果用戶request請求的是HTML頁面(默認地為HTML),dictionary將被渲染為HTML,如果用戶request請求的是XML頁面,則web2py將查詢與XML對應的view,將dictionary渲染為XML。開發人員可以創建相應的view來將頁面渲染為任意支持的類型 (HTML, XML, JSON, RSS, CSV, RTF),此外開發人員可以自定義其他的協議來渲染為其他類型的頁面。
5)所有的調用將會在transaction事務中完成,如果有任何未捕獲的異常發生,此transaction將被rollback。如果request執行成功,transaction將被commit。
6)web2py自動地處理sessions和session cookies,當transaction被commit,對應的session也被存儲,除非用戶顯式的制定放棄存儲。
7)web2py支持在指定的時間或某些指定的動作完成后并行的執行指定的任務。通過此方式,可以實現在后臺運行耗時的任務,不至于影響用戶體驗。
二 web2py中MVC的實例
1) 在web2py的管理頁面中http://127.0.0.1:8000/admin/default/site,新建簡單應用(New simple application)來創建簡單應用MyFirst。此時MyFirst其實是對welcome的拷貝。
2)修改modue,view和controller如下:

3)MyFirst\modules\db.py如下:
db.contacts.insert(name="itech",phone='123')
db.contacts.insert(name='AAA',phone='456')
db.contacts.insert(name='BBB', phone='789')
4)MyFirst\controllers\default.py如下:
return dict(records=db().select(db.contacts.ALL))
5)MyFirst\views\default\contacts.html如下:
{{for record in records:}}
{{=record.name}}:
{{=record.phone}}<br />{{pass}}
6)運行http://127.0.0.1:8000/MyFirst/default/contacts.html如下:
注意:正式項目中表中插入記錄不應該在db.py中,這里只是演示。在正式的項目中保留appadmin.py,appadmin.html就可以使用管理界面來操作數據庫。
三 web2py應用的目錄結構
1)Models 描述了數據的表現,包括數據庫table和table間關系;
2)controllers 描述了應用的邏輯和工作流;
3)views 描述了如何使用HTML和JavaScript將數據的呈現給用戶;
4)languages 描述了如何翻譯應用中的字符串到支持的各種語言;
5)static files 不需要處理(例如images,css stylesheets,等);
6)ABOUT和README 自解釋文檔;
7)errors 存儲了應用產生的錯誤報告;
8)sessions 存儲了跟特定用戶相關的信息;
9)databases 存儲了SQLite數據庫和其他相關的表信息;
10)cache 存儲了緩存的應用的部分;
11)modules 存儲了應用所引用的其他的python模塊;
12)private 存儲了只可以被controller訪問的文件;
13)uploads 存儲了只可以被models訪問的文件;
14)tests 存儲了testing相關的腳本;
Models,views,controllers,languages和static文件可以通過web administration界面來訪問。ABOUT,README和errors也可以通過web administration界面的菜單來訪問。Sessions,cache,modules,private和uploads只能被應用訪問,不能通過web administration界面訪問。
web2py的應用目錄如下:
__init__.py ABOUT LICENSE models views
controllers modules private tests cron
cache errors upload sessions static
其中__init__.py是一個空文件,用來使python能夠導入modules下的模塊。
完!


浙公網安備 33010602011771號