日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python 四大主流 Web 編程框架

 heii2 2019-08-09

作者:陳秋歌          鏈接:

https://blog.csdn.net/chenqiuge1984/article/details/80127498

本文內(nèi)容摘錄自《Python高效開發(fā)實(shí)戰(zhàn)——Django、Tornado、Flask、Twisted》一書。該書分為三部分:第1部分是基礎(chǔ)篇,帶領(lǐng)初學(xué)者實(shí)踐Python開發(fā)環(huán)境和掌握基本語法,同時對網(wǎng)絡(luò)協(xié)議、Web客戶端技術(shù)、數(shù)據(jù)庫建模編程等網(wǎng)絡(luò)編程基礎(chǔ)深入淺出地進(jìn)行學(xué)習(xí);第2部分是框架篇,學(xué)習(xí)當(dāng)前最流行的Python Web框架,即Django、Tornado、Flask和Twisted,達(dá)到對各種Python網(wǎng)絡(luò)技術(shù)融會貫通的目的;第3部分是實(shí)戰(zhàn)篇,分別對4種框架進(jìn)行項(xiàng)目實(shí)踐,利用其各自的特點(diǎn)開發(fā)適用于不同場景的網(wǎng)絡(luò)程序。

目前Python的網(wǎng)絡(luò)編程框架已經(jīng)多達(dá)幾十個,逐個學(xué)習(xí)它們顯然不現(xiàn)實(shí)。但這些框架在系統(tǒng)架構(gòu)和運(yùn)行環(huán)境中有很多共通之處,本文帶領(lǐng)讀者學(xué)習(xí)基于Python網(wǎng)絡(luò)框架開發(fā)的常用知識,及目前的4種主流Python網(wǎng)絡(luò)框架:Django、Tornado、Flask、Twisted。

網(wǎng)絡(luò)框架及MVC架構(gòu)

所謂網(wǎng)絡(luò)框架是指這樣的一組Python包,它能夠使開發(fā)者專注于網(wǎng)站應(yīng)用業(yè)務(wù)邏輯的開發(fā),而無須處理網(wǎng)絡(luò)應(yīng)用底層的協(xié)議、線程、進(jìn)程等方面。這樣能大大提高開發(fā)者的工作效率,同時提高網(wǎng)絡(luò)應(yīng)用程序的質(zhì)量。

在目前Python語言的幾十個開發(fā)框架中,幾乎所有的全棧網(wǎng)絡(luò)框架都強(qiáng)制或引導(dǎo)開發(fā)者使用MVC架構(gòu)開發(fā)Web應(yīng)用。所謂全棧網(wǎng)絡(luò)框架,是指除了封裝網(wǎng)絡(luò)和線程操作,還提供HTTP棧、數(shù)據(jù)庫讀寫管理、HTML模板引擎等一系列功能的網(wǎng)絡(luò)框架。本文重點(diǎn)講解的Django、Tornado和Flask是全棧網(wǎng)絡(luò)框架的典型標(biāo)桿;而Twisted更專注于網(wǎng)絡(luò)底層的高性能封裝而不提供HTML模板引擎等界面功能,所以不能稱之為全棧框架。

MVC(Model-View-Controller)模式最早由Trygve Reenskaug在1978年提出,在20世紀(jì)80年代是程序語言Smalltalk的一種內(nèi)部架構(gòu)。后來MVC被其他語言所借鑒,成為了軟件工程中的一種軟件架構(gòu)模式。MVC把Web應(yīng)用系統(tǒng)分為3個基本部分。

模型(Model):用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)及對數(shù)據(jù)的處理方法,是Web應(yīng)用程序中用于處理應(yīng)用程序的數(shù)據(jù)邏輯的部分,Model只提供功能性的接口,通過這些接口可以獲取Model的所有功能。Model不依賴于View和Controller,它們可以在任何時候調(diào)用Model訪問數(shù)據(jù)。有些Model還提供了事件通知機(jī)制,為在其上注冊過的View或Controller提供實(shí)時的數(shù)據(jù)更新。

視圖(View):負(fù)責(zé)數(shù)據(jù)的顯示和呈現(xiàn),View是對用戶的直接輸出。MVC中的一個Model通常為多個View提供服務(wù)。為了獲取Model的實(shí)時更新數(shù)據(jù),View應(yīng)該盡早地注冊到Model中。

控制器(Controller):負(fù)責(zé)從用戶端收集用戶的輸入,可以看成提供View的反向功能。當(dāng)用戶的輸入導(dǎo)致View發(fā)生變化時,這種變化必須是通過Model反映給View的。在MVC架構(gòu)下,Controller一般不能與View直接通信,這樣提高了業(yè)務(wù)數(shù)據(jù)的一致性,即以Model作為數(shù)據(jù)中心。

這3個基本部分互相分離,使得在改進(jìn)和升級界面及用戶交互流程時,不需要重寫業(yè)務(wù)邏輯及數(shù)據(jù)訪問代碼。MVC架構(gòu)如圖1所示。

MVC架構(gòu)圖

注意:MVC在除Python外的其他語言中也有廣泛應(yīng)用,例如VC++的MFC、Java的Structs及Spring、C#的.NET開發(fā)框架,讀者應(yīng)該有深刻的體會。
4種Python網(wǎng)絡(luò)框架:Django、Tornado、Flask、Twisted

接下來帶領(lǐng)大家學(xué)習(xí)當(dāng)今主流的4種Python網(wǎng)絡(luò)框架。

企業(yè)級開發(fā)框架——Django

Django于2003年誕生于美國堪薩斯(Kansas)州,最初用來制作在線新聞Web站點(diǎn),于2005年加入了BSD許可證家族,成為開源網(wǎng)絡(luò)框架。Django根據(jù)比利時的爵士音樂家Django Reinhardt命名,作者這樣命名Django意味著Django能優(yōu)雅地演奏(開發(fā))功能豐富的樂曲(Web應(yīng)用)。

它是當(dāng)前Python世界里最負(fù)盛名且最成熟的網(wǎng)絡(luò)框架。最初用來制作在線新聞的Web站點(diǎn),目前已發(fā)展為應(yīng)用最廣泛的Python網(wǎng)絡(luò)框架。Django的各模塊之間結(jié)合得比較緊密,所以在功能強(qiáng)大的同時又是一個相對封閉的系統(tǒng),但是其健全的在線文檔及開發(fā)社區(qū),使開發(fā)者在遇到問題時能找到解決方法。

Django框架的特點(diǎn)

相對于Python的其他Web框架,Django的功能是最完整的,Django定義了服務(wù)發(fā)布、路由映射、模板編程、數(shù)據(jù)處理的一整套功能。這也意味著Django模塊之間緊密耦合,開發(fā)者需要學(xué)習(xí)Django自己定義的這一整套技術(shù)。Django的主要特點(diǎn)如下。

完善的文檔:經(jīng)過10多年的發(fā)展和完善,Django有廣泛的應(yīng)用和完善的在線文檔,開發(fā)者遇到問題時可以搜索在線文檔尋求解決方案。
集成數(shù)據(jù)訪問組件:Django的Model層自帶數(shù)據(jù)庫ORM組件,使開發(fā)者無須學(xué)習(xí)其他數(shù)據(jù)庫訪問技術(shù)(dbi、SQLAlchemy等)。
強(qiáng)大的URL映射技術(shù):Django使用正則表達(dá)式管理URL映射,因此給開發(fā)者帶來了極高的靈活性。
后臺管理系統(tǒng)自動生成:開發(fā)者只需通過簡單的幾行配置和代碼就可以實(shí)現(xiàn)完整的后臺數(shù)據(jù)管理Web控制臺。
錯誤信息非常完整:在開發(fā)調(diào)試過程中如果出現(xiàn)運(yùn)行異常,則Django可以提供非常完整的錯誤信息幫助開發(fā)者定位問題,比如缺少xxx組件的配置引用等,這樣可以使開發(fā)者馬上改正錯誤。

Django的組成結(jié)構(gòu)

Django是遵循MVC架構(gòu)的Web開發(fā)框架,其主要由以下幾部分組成。

管理工具(Management):一套內(nèi)置的創(chuàng)建站點(diǎn)、遷移數(shù)據(jù)、維護(hù)靜態(tài)文件的命令工具。
模型(Model):提供數(shù)據(jù)訪問接口和模塊,包括數(shù)據(jù)字段、元數(shù)據(jù)、數(shù)據(jù)關(guān)系等的定義及操作。
視圖(View):Django的視圖層封裝了HTTP Request和Response的一系列操作和數(shù)據(jù)流,其主要功能包括URL映射機(jī)制、綁定模板等。
模板(Template):是一套Django自己的頁面渲染模板語言,用若干內(nèi)置的tags和filters定義頁面的生成方式。
表單(Form):通過內(nèi)置的數(shù)據(jù)類型和控件生成HTML表單。
管理站(Admin):通過聲明需要管理的Model,快速生成后臺數(shù)據(jù)管理網(wǎng)站。

高并發(fā)處理框架——Tornado

Tornado是使用Python編寫的一個強(qiáng)大的可擴(kuò)展的Web服務(wù)器。它在處理高網(wǎng)絡(luò)流量時表現(xiàn)得足夠強(qiáng)健,卻在創(chuàng)建和編寫時有著足夠的輕量級,并能夠被用在大量的應(yīng)用和工具中。Tornado作為FriendFeed網(wǎng)站的基礎(chǔ)框架,于2009年9月10日發(fā)布,目前已經(jīng)獲得了很多社區(qū)的支持,并且在一系列不同的場合中得到應(yīng)用。除FriendFeed和Facebook外,還有很多公司在生產(chǎn)上轉(zhuǎn)向Tornado,包括Quora、Turntable.fm、Bit.ly、Hipmunk及MyYearbook等。

相對于其他Python網(wǎng)絡(luò)框架,Tornado有如下特點(diǎn)。

完備的Web框架:與Django、Flask等一樣,Tornado也提供了URL路由映射、Request上下文、基于模板的頁面渲染技術(shù)等開發(fā)Web應(yīng)用的必備工具。
是一個高效的網(wǎng)絡(luò)庫,性能與Twisted、Gevent等底層Python框架相媲美:提供了異步I/O支持、超時事件處理。這使得Tornado除了可以作為Web應(yīng)用服務(wù)器框架,還可以用來做爬蟲應(yīng)用、物聯(lián)網(wǎng)關(guān)、游戲服務(wù)器等后臺應(yīng)用。
提供高效HTTPClient:除了服務(wù)器端框架,Tornado還提供了基于異步框架的HTTP客戶端。
提供高效的內(nèi)部HTTP服務(wù)器:雖然其他Python網(wǎng)絡(luò)框架(Django、Flask)也提供了內(nèi)部HTTP服務(wù)器,但它們的HTTP服務(wù)器由于性能原因只能用于測試環(huán)境。而Tornado的HTTP服務(wù)器與Tornado異步調(diào)用緊密結(jié)合,可以直接用于生產(chǎn)環(huán)境。
完備的WebSocket支持:WebSocket是HTML5的一種新標(biāo)準(zhǔn),實(shí)現(xiàn)了瀏覽器與服務(wù)器之間的雙向?qū)崟r通信。
因?yàn)門ornado的上述特點(diǎn),Tornado常被用作大型站點(diǎn)的接口服務(wù)框架,而不像Django那樣著眼于建立完整的大型網(wǎng)站,所以本章著重講解Tornado的異步及協(xié)程編程、身份認(rèn)證框架、獨(dú)特的非WSGI部署方式。

支持快速建站的框架——Flask

Flask是Python Web框架族里比較年輕的一個,于2010年出現(xiàn),這使得它吸收了其他框架的優(yōu)點(diǎn),并且把自己的主要領(lǐng)域定義在了微小項(xiàng)目上。同時,它是可擴(kuò)展的,F(xiàn)lask讓開發(fā)者自己選擇用什么數(shù)據(jù)庫插件存儲他們的數(shù)據(jù)。很多功能簡單但性能卓越的網(wǎng)站就是基于Flask框架而搭建的,比如http:///就是一個功能簡單但性能強(qiáng)大的HTTP測試項(xiàng)目。Flask是一個面向簡單需求和小型應(yīng)用的微框架。

相對于其他Python語言的Web框架而言,F(xiàn)lask的特點(diǎn)可以歸結(jié)如下。

內(nèi)置開發(fā)服務(wù)器和調(diào)試器
網(wǎng)絡(luò)程序調(diào)試是在將編制好的網(wǎng)站投入實(shí)際運(yùn)行前,用手工或編譯程序等方法進(jìn)行測試,修正語法錯誤和邏輯錯誤的過程。有經(jīng)驗(yàn)的開發(fā)者都知道,這是保證網(wǎng)站系統(tǒng)能夠正式應(yīng)用的必要步驟。
Flask 自帶的開發(fā)服務(wù)器使開發(fā)者在調(diào)試程序時無須再安裝其他任何網(wǎng)絡(luò)服務(wù)器,比如Tomcat、JBoss、Apache等。Flask默認(rèn)處于調(diào)試狀態(tài),使得運(yùn)行中的任何錯誤會同時向兩個目標(biāo)發(fā)送信息:一個是Python Console,即啟動Python程序的控制臺;另一個是HTTP客戶端,即Flask開發(fā)服務(wù)器將調(diào)試信息傳遞給了客戶端。
與Python單元測試功能無縫銜接
單元測試是對最小軟件開發(fā)單元的測試,其重點(diǎn)測試程序的內(nèi)部結(jié)構(gòu),主要采用白盒測試方法,由開發(fā)人員負(fù)責(zé)。單元測試的主要目標(biāo)是保證函數(shù)在給定的輸入狀態(tài)下,能夠得到預(yù)想的輸出,在不符合要求時能夠提醒開發(fā)人員進(jìn)行檢查。
Flask提供了一個與Python自帶的單元測試框架unitest無縫銜接的測試接口,即Flask對象的test_client()函數(shù)。通過test_client()函數(shù),測試程序可以模擬進(jìn)行HTTP訪問的客戶端來調(diào)用Flask路由處理函數(shù),并且獲取函數(shù)的輸出來進(jìn)行自定義的驗(yàn)證。
使用Jinja2模板
將HTML頁面與后臺應(yīng)用程序聯(lián)系起來一直是網(wǎng)站程序框架的一個重要目標(biāo)。Flask通過使用Jinja2模板技術(shù)解決了這個問題。Jinja2是一個非常靈活的HTML模板技術(shù),它是從Django模板發(fā)展而來的,但是比Django模板使用起來更加自由且更加高效。Jinja2模板使用配制的語義系統(tǒng),提供靈活的模板繼承技術(shù),自動抗擊XSS跨站攻擊并且易于調(diào)試。
完全兼容WSGI 1.0標(biāo)準(zhǔn)
WSGI(Web Server Gateway Interface)具有很強(qiáng)的伸縮性且能運(yùn)行于多線程或多進(jìn)程環(huán)境下,因?yàn)镻ython線程全局鎖的存在,使得WSGI的這個特性至關(guān)重要。WSGI已經(jīng)是Python界的一個主要標(biāo)準(zhǔn),各種大型網(wǎng)路服務(wù)器對其都有良好的支持。WSGI位于Web應(yīng)用程序與Web服務(wù)器之間,與WSGI完全兼容使得Flask能夠配置到各種大型網(wǎng)絡(luò)服務(wù)器中。
基于Unicode編碼
Flask是完全基于Unicode的。這對制作非純ASCII字符集的網(wǎng)站來說非常方便。HTTP本身是基于字節(jié)的,也就是說任何編碼格式都可以在HTTP中傳輸。但是,HTTP要求在HTTP Head中顯式地聲明在本次傳輸中所應(yīng)用的編碼格式。在默認(rèn)情況下,F(xiàn)lask會自動添加一個UTF-8編碼格式的HTTP Head,使程序員無須擔(dān)心編碼的問題。

底層自定義協(xié)議網(wǎng)絡(luò)框架——Twisted

以上講到的3個Python Web框架都是圍繞著應(yīng)用層HTTP展開的,而Twisted是一個例外。Twisted是一個用Python語言編寫的事件驅(qū)動的網(wǎng)絡(luò)框架,對于追求服務(wù)器程序性能的應(yīng)用,Twisted框架是一個很好的選擇。

Twisted是一個有著10多年歷史的開源事件驅(qū)動框架。Twisted支持很多種協(xié)議,包括傳輸層的UDP、TCP、TLS,以及應(yīng)用層的HTTP、FTP等。對于所有這些協(xié)議,Twisted提供了客戶端和服務(wù)器方面的開發(fā)工具。

Twisted框架的歷史悠久,其主要發(fā)行版本都以Python 2為基礎(chǔ),最新的版本為基于Python 2.7的Twisted-15.4.0。Twisted社區(qū)正在開發(fā)基于Python 3的版本,但目前為止尚沒有基于Python 3的Twisted穩(wěn)定發(fā)行版。

Twisted是一個高性能的編程框架。在不同的操作系統(tǒng)平臺上,Twisted利用不同的底層技術(shù)實(shí)現(xiàn)了高效能通信。在Windows中,Twisted的實(shí)現(xiàn)基于I/O完成端口(IOCP,Input/Output Completion Port)技術(shù),它保證了底層高效地將I/O事件通知給框架及應(yīng)用程序;在Linux中,Twisted的實(shí)現(xiàn)基于epoll技術(shù),epoll是Linux下多路復(fù)用I/O接口select/poll的增強(qiáng)版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率。
在開發(fā)方法上,Twisted引導(dǎo)程序員使用異步編程模型。Twisted提供了豐富的Defer、Threading等特性來支持異步編程。

欲進(jìn)一步了解Python四大主流網(wǎng)絡(luò)編程框架的編程方法、項(xiàng)目實(shí)戰(zhàn),可參見《Python高效開發(fā)實(shí)戰(zhàn)——Django、Tornado、Flask、Twisted》一書。

(完)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多