不管是python,還是php,亦或別的做web項目的語言,乃至于做其它非web項目的開發,一般都要用到一個稱之為什么什么框架的東西。
## 框架的基本概念
開發這對框架的認識,由于工作習慣和工作內容的不同,有很大差異,這里姑且截取[維基百科中的一種定義](http://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%A1%86%E6%9E%B6),之所以要給出一個定義,無非是讓看官有所了解,但是是否知道這個定義,絲毫不影響后面的工作。
> 軟件框架(Software framework),通常指的是為了實現某個業界標準或完成特定基本任務的軟件組件規范,也指為了實現某個軟件組件規范時,提供規范所要求之基礎功能的軟件產品。
>
> 框架的功能類似于基礎設施,與具體的軟件應用無關,但是提供并實現最為基礎的軟件架構和體系。軟件開發者通常依據特定的框架實現更為復雜的商業運用和業務邏輯。這樣的軟件應用可以在支持同一種框架的軟件系統中運行。
>
> 簡而言之,框架就是制定一套規范或者規則(思想),大家(程序員)在該規范或者規則(思想)下工作。或者說就是使用別人搭好的舞臺,你來做表演。
我比較喜歡最后一句的解釋,別人搭好舞臺,我來表演。這也就是說,如果我在做web項目的時候,能夠省卻很多開發工作。的確是。所有,做web開發,要用一個框架。
有高手工程師鄙視框架,認為自己編寫的才是王道。這方面不爭論,框架是開發中很流行的東西,我還是固執地認為用框架來開發,更劃算。
## python框架
有人說php(什么是php,嚴肅的說法,這是另外一種語言,更高雅的說法,是某個活動的漢語拼音簡稱)框架多,我不否認,php的開發框架的確很多很多。不過,python的web開發框架,也足夠使用了,列舉幾種常見的web框架:
* Django:這是一個被廣泛應用的框架,如果看官在網上搜索,會發現很多公司在招聘的時候就說要會這個,其實這種招聘就暴露了該公司的開發水平要求不高。框架只是輔助,真正的程序員,用什么框架,都應該是根據需要而來。當然不同框架有不同的特點,需要學習一段時間。
* Flask:一個用Python編寫的輕量級Web應用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。
* Web2py:是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的數據庫驅動的應用,兼容Google App Engine(這是google的元計算引擎,后面我會單獨介紹)。
* Bottle: 微型Python Web框架,遵循WSGI,說微型,是因為它只有一個文件,除Python標準庫外,它不依賴于任何第三方模塊。
* Tornado:全稱是Torado Web Server,從名字上看就可知道它可以用作Web服務器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之后便開源了出來。
* webpy: 輕量級的Python Web框架。webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模塊,它沒有URL路由、沒有模板也沒有數據庫的訪問。
說明:以上信息選自:[http://blog.jobbole.com/72306/](http://blog.jobbole.com/72306/)?,這篇文章中還有別的框架,由于不是web框架,我沒有選摘,有興趣的去閱讀。
## Tornado
一看到這個標題就知道,本教程中將選擇使用這個框架。此前有朋友建議我用Django,首先它是一個好東西。但是,我更愿意用Tornado,為什么呢?因為......,看下邊或許是理由,也或許不是。
Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務器兼Web應用框架,由FriendFeed公司在自己的網站FriendFeed中使用,被Facebook收購以后框架以開源軟件形式開放給大眾。看來Tornado的出身高貴呀,對了,如果是在天朝的看官,可能對Facebook有風聞,但是要一睹其芳容,還要努力。或者有人是不是懷疑這個地球上就沒有這個網站呢?哈哈。按照某個地方的網絡,它是存在的。廢話不說,還是看Tornado的性能,因為選框架,一定要選好性能的,沒準兒什么時候你也開發高大上的東西了。
Tornado的性能是相當優異的,因為它試圖解決一個被稱之為“C10k”問題,就是處理大于或等于一萬的并發。一萬呀,這可是不小的量。(關于C10K問題,看官可以瀏覽:[C10k problem](http://en.wikipedia.org/wiki/C10k_problem))
下表是和一些其他Web框架與服務器的對比,供看官參考(數據來源:?[https://developers.facebook.com/blog/post/301](https://developers.facebook.com/blog/post/301)?)
條件:處理器為 AMD Opteron, 主頻2.4GHz, 4核
| 服務 | 部署 | 請求/每秒 |
| --- | --- | --- |
| Tornado | nginx, 4進程 | 8213 |
| Tornado | 1個單線程進程 | 3353 |
| Django | Apache/mod_wsgi | 2223 |
| web.py | Apache/mod_wsgi | 2066 |
| CherryPy | 獨立 | 785 |
看了這個對比表格,還有什么理由不選擇Tornado呢?
就是它了——**Tornado**
## 安裝Tornado
Tornado的官方網站:[http://www.tornadoweb.org](http://www.tornadoweb.org/en/latest/)
在官網上,有安裝方法,其實,看官也可以直接在官方上學習。另外,有一個中文鏡像網站,看官也可以訪問:[http://www.tornadoweb.cn/](http://www.tornadoweb.cn/)
我在自己電腦中(ubuntu12.04),用下面方法安裝,只需要一句話即可:
~~~
pip install tornado
~~~
這是因為Tornado已經列入PyPI,因此可以通過 pip 或者 easy_install 來安裝。
如果你沒有安裝 libcurl 的話,你需要將其單獨安裝到系統中。請參見下面的安裝依賴一節。
如果不用這種方式安裝,下面的頁面中有可以供看官下載的最新源碼版本和安裝方式:
[https://pypi.python.org/pypi/tornado/](https://pypi.python.org/pypi/tornado/)
此外,在github上也有托管,看官可以通過上述頁面進入到github看源碼。
最后要補充一個要點,就是上述下載的Tornado無法直接安裝在windows上,如果要在windows上安裝,建議使用pypm(這是一個什么東西,關于這個東西,可以訪問官方文檔:[http://docs.activestate.com/activepython/2.6/pypm.html](http://docs.activestate.com/activepython/2.6/pypm.html)?,說實話,我也沒有用過它,只是看了看文檔罷了。看官如果有使用的,可以寫一個教程共享之。),如下安裝:
~~~
C:\> pypm install tornado
~~~
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python