作為一個程序猿一定要會做網站。這也不一定吧,貌似是,但是,如果被人問及此事,如果說自己不會,的確羞愧難當呀。所以,本教程要講一講如何做網站。
> 推薦閱讀:[History of the World Wide Web](http://en.wikipedia.org/wiki/History_of_the_World_Wide_Web)
首先,為自己準備一個服務器。這個要求似乎有點過分,作為一個普通的窮苦聊到的程序員,哪里有銅鈿來購買服務器呢?沒關系,不夠買服務器也能做網站,可以購買云服務空間或者虛擬空間,這個在網上搜搜,很多。如果購買這個的銅鈿也沒有,還可以利用自己的電腦(這總該有了)作為服務服務器。我就是利用一臺裝有ubuntu操作系統的個人電腦作為本教程的案例演示服務器。
然后,要在這個服務器上做一些程序配置。一些必備的網絡配置這里就不說了,比如我用的ubuntu系統,默認情況都有了。如果讀者遇到一些問題,可以搜一下,網上資料多多。另外的配置就是python開發環境,這個應該也有了,前面已經在用了。
接下來,要安裝一個框架。本教程中制作網站的案例采用tornado框架。
在安裝這個框架之前,先了解一些相關知識。
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/301.md#開發框架)開發框架
對框架的認識,由于工作習慣和工作內容的不同,有很大差異,這里姑且截取[維基百科中的一種定義](http://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%A1%86%E6%9E%B6),之所以要給出一個定義,無非是讓看官有所了解,但是是否知道這個定義,絲毫不影響后面的工作。
> 軟件框架(Software framework),通常指的是為了實現某個業界標準或完成特定基本任務的軟件組件規范,也指為了實現某個軟件組件規范時,提供規范所要求之基礎功能的軟件產品。
>
> 框架的功能類似于基礎設施,與具體的軟件應用無關,但是提供并實現最為基礎的軟件架構和體系。軟件開發者通常依據特定的框架實現更為復雜的商業運用和業務邏輯。這樣的軟件應用可以在支持同一種框架的軟件系統中運行。
>
> 簡而言之,框架就是制定一套規范或者規則(思想),大家(程序員)在該規范或者規則(思想)下工作。或者說就是使用別人搭好的舞臺,你來做表演。
我比較喜歡最后一句的解釋,別人搭好舞臺,我來表演。這也就是說,如果在做軟件開發的時候,能夠減少工作量。就做網站來講,其實需要做的事情很多,但是如果有了開發框架,很多底層的事情就不需要做了(都有哪些底層的事情呢?讀者能否回答?)。
有高手工程師鄙視框架,認為自己編寫的才是王道。這方面不爭論,框架是開發中很流行的東西,我還是固執地認為用框架來開發,更劃算。
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/301.md#python框架)python框架
有人說php(什么是php,嚴肅的說法,這是另外一種語言,更高雅的說法,是某個活動的漢語拼音簡稱)框架多,我不否認,php的開發框架的確很多很多。不過,python的web開發框架,也足夠使用了,列舉幾種常見的web框架:
* Django:這是一個被廣泛應用的框架。在網上搜索,會發現很多公司在招聘的時候就說要會這個。框架只是輔助,真正的程序員,用什么框架,都應該是根據需要而來。當然不同框架有不同的特點,需要學習一段時間。
* Flask:一個用Python編寫的輕量級Web應用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。
* Web2py:是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的數據庫驅動的應用,兼容Google App Engine。
* Bottle: 微型Python Web框架,遵循WSGI,說微型,是因為它只有一個文件,除Python標準庫外,它不依賴于任何第三方模塊。
* Tornado:全稱是Tornado 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框架,我沒有選摘,有興趣的去閱讀。
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/301.md#tornado)Tornado
本教程中將選擇使用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**
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/301.md#安裝tornado)安裝Tornado
Tornado的官方網站:[http://www.tornadoweb.org](http://www.tornadoweb.org/en/latest/)
我在自己電腦中(是我目前使用的服務器),用下面方法安裝,只需要一句話即可:
~~~
pip install tornado
~~~
這是因為Tornado已經列入PyPI,因此可以通過 pip 或者 easy_install 來安裝。
如果不用這種方式安裝,下面的頁面中有可以供看官下載的最新源碼版本和安裝方式:[https://pypi.python.org/pypi/tornado/](https://pypi.python.org/pypi/tornado/)
此外,在github上也有托管,看官可以通過上述頁面進入到github看源碼。
我沒有在windows操作系統上安裝過這個東西,不過,在官方網站上有一句話,可能在告訴讀者一些信息:
> Tornado will also run on Windows, although this configuration is not officially supported and is recommended only for development use.
特別建議,在真正的工程中,網站的服務器還是用Linux比較好,你懂得(嗎?)。
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/301.md#技術準備)技術準備
除了做好上述準備之外,還要有點技術準備:
* HTML
* CSS
* JavaScript
我們在后面實例中,不會搞太復雜的界面和JavaScript(JS)操作,所以,只需要基本知識即可。
- 第零章 預備
- 關于Python的故事
- 從小工到專家
- Python安裝
- 集成開發環境
- 第壹章 基本數據類型
- 數和四則運算
- 除法
- 常用數學函數和運算優先級
- 寫一個簡單的程序
- 字符串(1)
- 字符串(2)
- 字符串(3)
- 字符串(4)
- 字符編碼
- 列表(1)
- 列表(2)
- 列表(3)
- 回顧list和str
- 元組
- 字典(1)
- 字典(2)
- 集合(1)
- 集合(2)
- 第貳章 語句和文件
- 運算符
- 語句(1)
- 語句(2)
- 語句(3)
- 語句(4)
- 語句(5)
- 文件(1)
- 文件(2)
- 迭代
- 練習
- 自省
- 第叁章 函數
- 函數(1)
- 函數(2)
- 函數(3)
- 函數(4)
- 函數練習
- 第肆章 類
- 類(1)
- 類(2)
- 類(3)
- 類(4)
- 類(5)
- 多態和封裝
- 特殊方法(1)
- 特殊方法(2)
- 迭代器
- 生成器
- 上下文管理器
- 第伍章 錯誤和異常
- 錯誤和異常(1)
- 錯誤和異常(2)
- 錯誤和異常(3)
- 第陸章 模塊
- 編寫模塊
- 標準庫(1)
- 標準庫(2)
- 標準庫(3)
- 標準庫(4)
- 標準庫(5)
- 標準庫(6)
- 標準庫(7)
- 標準庫(8)
- 第三方庫
- 第柒章 保存數據
- 將數據存入文件
- mysql數據庫(1)
- MySQL數據庫(2)
- mongodb數據庫(1)
- SQLite數據庫
- 電子表格
- 第捌章 用Tornado做網站
- 為做網站而準備
- 分析Hello
- 用tornado做網站(1)
- 用tornado做網站(2)
- 用tornado做網站(3)
- 用tornado做網站(4)
- 用tornado做網站(5)
- 用tornado做網站(6)
- 用tornado做網站(7)
- 第玖章 科學計算
- 為計算做準備
- Pandas使用(1)
- Pandas使用(2)
- 處理股票數據
- 附:網絡文摘
- 如何成為Python高手
- ASCII、Unicode、GBK和UTF-8字符編碼的區別聯系