本文內(nèi)容摘錄自《Python高效開發(fā)實戰(zhàn)——Django、Tornado、Flask、Twisted》一書。該書分為三部分:第1部分是基礎篇,帶領初學者實踐Python開發(fā)環(huán)境和掌握基本語法,同時對網(wǎng)絡協(xié)議、Web客戶端技術、數(shù)據(jù)庫建模編程等網(wǎng)絡編程基礎深入淺出地進行學習;第2部分是框架篇,學習當前最流行的Python Web框架,即Django、Tornado、Flask和Twisted,達到對各種Python網(wǎng)絡技術融會貫通的目的;第3部分是實戰(zhàn)篇,分別對4種框架進行項目實踐,利用其各自的特點開發(fā)適用于不同場景的網(wǎng)絡程序。 目前Python的網(wǎng)絡編程框架已經(jīng)多達幾十個,逐個學習它們顯然不現(xiàn)實。但這些框架在系統(tǒng)架構和運行環(huán)境中有很多共通之處,本文帶領讀者學習基于Python網(wǎng)絡框架開發(fā)的常用知識,及目前的4種主流Python網(wǎng)絡框架:Django、Tornado、Flask、Twisted。 網(wǎng)絡框架及MVC架構 所謂網(wǎng)絡框架是指這樣的一組Python包,它能夠使開發(fā)者專注于網(wǎng)站應用業(yè)務邏輯的開發(fā),而無須處理網(wǎng)絡應用底層的協(xié)議、線程、進程等方面。這樣能大大提高開發(fā)者的工作效率,同時提高網(wǎng)絡應用程序的質量。 在目前Python語言的幾十個開發(fā)框架中,幾乎所有的全棧網(wǎng)絡框架都強制或引導開發(fā)者使用MVC架構開發(fā)Web應用。所謂全棧網(wǎng)絡框架,是指除了封裝網(wǎng)絡和線程操作,還提供HTTP棧、數(shù)據(jù)庫讀寫管理、HTML模板引擎等一系列功能的網(wǎng)絡框架。本文重點講解的Django、Tornado和Flask是全棧網(wǎng)絡框架的典型標桿;而Twisted更專注于網(wǎng)絡底層的高性能封裝而不提供HTML模板引擎等界面功能,所以不能稱之為全棧框架。 MVC(Model-View-Controller)模式最早由Trygve Reenskaug在1978年提出,在20世紀80年代是程序語言Smalltalk的一種內(nèi)部架構。后來MVC被其他語言所借鑒,成為了軟件工程中的一種軟件架構模式。MVC把Web應用系統(tǒng)分為3個基本部分。 模型(Model):用于封裝與應用程序的業(yè)務邏輯相關的數(shù)據(jù)及對數(shù)據(jù)的處理方法,是Web應用程序中用于處理應用程序的數(shù)據(jù)邏輯的部分,Model只提供功能性的接口,通過這些接口可以獲取Model的所有功能。Model不依賴于View和Controller,它們可以在任何時候調用Model訪問數(shù)據(jù)。有些Model還提供了事件通知機制,為在其上注冊過的View或Controller提供實時的數(shù)據(jù)更新。 視圖(View):負責數(shù)據(jù)的顯示和呈現(xiàn),View是對用戶的直接輸出。MVC中的一個Model通常為多個View提供服務。為了獲取Model的實時更新數(shù)據(jù),View應該盡早地注冊到Model中。 控制器(Controller):負責從用戶端收集用戶的輸入,可以看成提供View的反向功能。當用戶的輸入導致View發(fā)生變化時,這種變化必須是通過Model反映給View的。在MVC架構下,Controller一般不能與View直接通信,這樣提高了業(yè)務數(shù)據(jù)的一致性,即以Model作為數(shù)據(jù)中心。 這3個基本部分互相分離,使得在改進和升級界面及用戶交互流程時,不需要重寫業(yè)務邏輯及數(shù)據(jù)訪問代碼。MVC架構如圖1所示。 MVC架構圖 注意:MVC在除Python外的其他語言中也有廣泛應用,例如VC++的MFC、Java的Structs及Spring、C#的.NET開發(fā)框架,讀者應該有深刻的體會。 接下來帶領大家學習當今主流的4種Python網(wǎng)絡框架。 企業(yè)級開發(fā)框架——Django Django于2003年誕生于美國堪薩斯(Kansas)州,最初用來制作在線新聞Web站點,于2005年加入了BSD許可證家族,成為開源網(wǎng)絡框架。Django根據(jù)比利時的爵士音樂家Django Reinhardt命名,作者這樣命名Django意味著Django能優(yōu)雅地演奏(開發(fā))功能豐富的樂曲(Web應用)。 它是當前Python世界里最負盛名且最成熟的網(wǎng)絡框架。最初用來制作在線新聞的Web站點,目前已發(fā)展為應用最廣泛的Python網(wǎng)絡框架。Django的各模塊之間結合得比較緊密,所以在功能強大的同時又是一個相對封閉的系統(tǒng),但是其健全的在線文檔及開發(fā)社區(qū),使開發(fā)者在遇到問題時能找到解決方法。 Django框架的特點 相對于Python的其他Web框架,Django的功能是最完整的,Django定義了服務發(fā)布、路由映射、模板編程、數(shù)據(jù)處理的一整套功能。這也意味著Django模塊之間緊密耦合,開發(fā)者需要學習Django自己定義的這一整套技術。Django的主要特點如下。 完善的文檔:經(jīng)過10多年的發(fā)展和完善,Django有廣泛的應用和完善的在線文檔,開發(fā)者遇到問題時可以搜索在線文檔尋求解決方案。 Django的組成結構 Django是遵循MVC架構的Web開發(fā)框架,其主要由以下幾部分組成。 管理工具(Management):一套內(nèi)置的創(chuàng)建站點、遷移數(shù)據(jù)、維護靜態(tài)文件的命令工具。 高并發(fā)處理框架——Tornado Tornado是使用Python編寫的一個強大的可擴展的Web服務器。它在處理高網(wǎng)絡流量時表現(xiàn)得足夠強健,卻在創(chuàng)建和編寫時有著足夠的輕量級,并能夠被用在大量的應用和工具中。Tornado作為FriendFeed網(wǎng)站的基礎框架,于2009年9月10日發(fā)布,目前已經(jīng)獲得了很多社區(qū)的支持,并且在一系列不同的場合中得到應用。除FriendFeed和Facebook外,還有很多公司在生產(chǎn)上轉向Tornado,包括Quora、Turntable.fm、Bit.ly、Hipmunk及MyYearbook等。 相對于其他Python網(wǎng)絡框架,Tornado有如下特點。 完備的Web框架:與Django、Flask等一樣,Tornado也提供了URL路由映射、Request上下文、基于模板的頁面渲染技術等開發(fā)Web應用的必備工具。 支持快速建站的框架——Flask Flask是Python Web框架族里比較年輕的一個,于2010年出現(xiàn),這使得它吸收了其他框架的優(yōu)點,并且把自己的主要領域定義在了微小項目上。同時,它是可擴展的,F(xiàn)lask讓開發(fā)者自己選擇用什么數(shù)據(jù)庫插件存儲他們的數(shù)據(jù)。很多功能簡單但性能卓越的網(wǎng)站就是基于Flask框架而搭建的,比如http:///就是一個功能簡單但性能強大的HTTP測試項目。Flask是一個面向簡單需求和小型應用的微框架。 相對于其他Python語言的Web框架而言,F(xiàn)lask的特點可以歸結如下。 內(nèi)置開發(fā)服務器和調試器 底層自定義協(xié)議網(wǎng)絡框架——Twisted 以上講到的3個Python Web框架都是圍繞著應用層HTTP展開的,而Twisted是一個例外。Twisted是一個用Python語言編寫的事件驅動的網(wǎng)絡框架,對于追求服務器程序性能的應用,Twisted框架是一個很好的選擇。 Twisted是一個有著10多年歷史的開源事件驅動框架。Twisted支持很多種協(xié)議,包括傳輸層的UDP、TCP、TLS,以及應用層的HTTP、FTP等。對于所有這些協(xié)議,Twisted提供了客戶端和服務器方面的開發(fā)工具。 Twisted框架的歷史悠久,其主要發(fā)行版本都以Python 2為基礎,最新的版本為基于Python 2.7的Twisted-15.4.0。Twisted社區(qū)正在開發(fā)基于Python 3的版本,但目前為止尚沒有基于Python 3的Twisted穩(wěn)定發(fā)行版。 Twisted是一個高性能的編程框架。在不同的操作系統(tǒng)平臺上,Twisted利用不同的底層技術實現(xiàn)了高效能通信。在Windows中,Twisted的實現(xiàn)基于I/O完成端口(IOCP,Input/Output Completion Port)技術,它保證了底層高效地將I/O事件通知給框架及應用程序;在Linux中,Twisted的實現(xiàn)基于epoll技術,epoll是Linux下多路復用I/O接口select/poll的增強版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率。 欲進一步了解Python四大主流網(wǎng)絡編程框架的編程方法、項目實戰(zhàn),可參見《Python高效開發(fā)實戰(zhàn)——Django、Tornado、Flask、Twisted》一書。 (完) |
|
|