Python 四大主流 Web 編程框架

目前Python的網絡編程框架已經多達幾十個,逐個學習它們顯然不現實。但這些框架在系統架構和運行環境中有很多共通之處,本文帶領讀者學習基于Python網絡框架開發的常用知識,及目前的4種主流Python網絡框架:Django、Tornado、Flask、Twisted。

網絡框架及MVC架構
所謂網絡框架是指這樣的一組Python包,它能夠使開發者專注于網站應用業務邏輯的開發,而無須處理網絡應用底層的協議、線程、進程等方面。這樣能大大提高開發者的工作效率,同時提高網絡應用程序的質量。

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

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

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

視圖(View):負責數據的顯示和呈現,View是對用戶的直接輸出。MVC中的一個Model通常為多個View提供服務。為了獲取Model的實時更新數據,View應該盡早地注冊到Model中。

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

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

MVC架構圖

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

接下來學習當今主流的4種Python網絡框架。

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

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

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

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

Django的組成結構

Django是遵循MVC架構的Web開發框架,其主要由以下幾部分組成。

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

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

相對于其他Python網絡框架,Tornado有如下特點。

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

支持快速建站的框架——Flask
Flask是Python Web框架族里比較年輕的一個,于2010年出現,這使得它吸收了其他框架的優點,并且把自己的主要領域定義在了微小項目上。同時,它是可擴展的,Flask讓開發者自己選擇用什么數據庫插件存儲他們的數據。很多功能簡單但性能卓越的網站就是基于Flask框架而搭建的,比如http://httpbin.org/就是一個功能簡單但性能強大的HTTP測試項目。Flask是一個面向簡單需求和小型應用的微框架。

相對于其他Python語言的Web框架而言,Flask的特點可以歸結如下。

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

底層自定義協議網絡框架——Twisted

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

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

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

Twisted是一個高性能的編程框架。在不同的操作系統平臺上,Twisted利用不同的底層技術實現了高效能通信。在Windows中,Twisted的實現基于I/O完成端口(IOCP,Input/Output Completion Port)技術,它保證了底層高效地將I/O事件通知給框架及應用程序;在Linux中,Twisted的實現基于epoll技術,epoll是Linux下多路復用I/O接口select/poll的增強版本,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
在開發方法上,Twisted引導程序員使用異步編程模型。Twisted提供了豐富的Defer、Threading等特性來支持異步編程。
原文地址https://www.cnblogs.com/an-wen/p/11330834.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455268.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

汕頭市隊賽 SRM16 T2

描述 貓和老鼠,看過吧?貓來了,老鼠要躲進洞里。在一條數軸上,一共有n個洞,位置分別在xi,能容納vi只老鼠。一共有m只老鼠位置分別在Xi,要躲進洞里,問所有老鼠跑進洞里的距離總和最小是…

基于django和vue的xdh官網設計

前言 本項目是使用三段分離的設計 前臺 使用materialize框架搭建的前臺頁面,后端使用的django寫的接口 后臺 使用Amazon UI 模板搭建的界面,管理各個部分的內容 項目環境 python3.7.2 django2.2.9 vue axios jQuery materialize mysql摘 要 本設計采用前后端分離的設計…

C#調用WebService實例和開發(轉)

http://www.cnblogs.com/peterpc/p/4628441.html 一、基本概念 Web Service也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。是:通過SOAP在Web上提供的軟件服務,使用WSDL文件…

智能情緒分析技術_簡單分析人工智能的表現在計算機網絡應用技術中的優勢

簡單分析人工智能的表現在計算機網絡應用技術中的優勢大數據時代背景下, 計算機網絡技術迅猛發展, 而人工智能技術的發展也進一步推動了計算機網絡技術的發展, 兩者相互融合, 相互促進, 實現了雙贏發展。從人工智能技術…

隨筆:關于關于

突然感覺挺累的。 我愛你。 北京,加油。轉載于:https://www.cnblogs.com/zhengzeze/p/7448878.html

MV預測過程詳解

第一步:確定相鄰塊 MV 預測以宏塊分割(或亞宏塊分割,如果宏塊存在亞分割)為單位,同一個宏塊分割(或亞宏塊分割)內所有 4*4 塊 MV 預測值相同。以每個宏塊分割(或亞宏塊分割&…

Django models中關于blank與null的補充說明

建立一個簡易Model class Person(models.Model):GENDER_CHOICES((1,Male),(2,Female),)namemodels.CharField(max_length30,uniqueTrue,verbose_name姓 名) birthdaymodels.DateField(blankTrue,nullTrue)gendermodels.IntegerField(choicesGENDER_CHOICES)accountmodels.In…

python 人臉關鍵點檢測_opencv+python+dlib人臉關鍵點檢測、實時檢測

安裝的是anaconde3、python3.7.3,3.7環境安裝dlib太麻煩,在anaconde3中新建環境python3.6.8,在3.6環境下安裝dlib-19.6.1-cp36-cp36m-win_amd64.whl,下載地址:https://pypi.org/project/dlib/19.6.1/#filesvscode更改配…

Zabbix2.2.6郵件報警設置方法

http://www.jb51.net/article/56973.htm 這篇文章主要介紹了Zabbix郵件報警設置方法,在Zabbix服務端設置郵件報警,當被監控主機宕機或者達到觸發器預設值時,會自動發送報警郵件到指定郵箱說明:Zabbix監控服務端、客戶端都已經部署完…

Skip宏塊與Direct預測模式淺析

對于我來說,這個是一個老問題了。以前藍風車專門給我講解,我都沒搞懂(真有點對不起藍風車的細心教誨哈。呵呵~~~)。今天終于弄清楚了,特此總結出來,請大家指正。 B_Skip類型宏…

自律

生活上的自律 寫出自律的代碼 身體上的自律 日常生活中,存在這么兩條路。一條路誘惑我們只根據自己的沖動和直覺來生活。這條路可以稱為「寵物之路」,因為所有的動物,包括家里養的寵物狗走的都是這條路。餓了就吃,吃完就算。…

解決兼容性的庫

HTML5標簽兼容方案&#xff1a;html5shiv.js [GitHub地址&#xff1a;https://github.com/aFarkas/html5shiv/] IE8不支持HTML5的新標簽&#xff0c;如<header>、<nav>等標簽在IE8無法渲染。html5shiv.js可幫助IE6-8瀏覽器兼容HTML5語義化標簽。 使用方法&#xff…

H.264 中的相關問題

幀內解碼時&#xff0c;在解碼端&#xff0c;首先通過當前宏塊左邊、上邊已經解碼完成的宏塊使用當前宏塊的預測模式&#xff08;預測模式計算過程請參見我的論文《H.264數字視頻差錯控制技術的研究》&#xff0c;在群FTP“本群原創資料”目錄中&#xff09;得到當前宏塊的像素…

wenzhixin bootstrap-table 點擊table單元格改變顏色

bootstrap-table用于展示數據非常方便&#xff0c;也需要滿足一些個性化需求。比如點擊窗格&#xff08;td&#xff09;標記下顏色&#xff0c;用于目測 代碼如下&#xff0c;轉載請注明 $("table").on(click-row.bs.table, function (e, row, $el) {//el[0] is tr …

tornado學習筆記day01-高并發性能web框架

tornado的安裝 這里我使用的是虛擬環境中的pip安裝,配合清華大學鏡像源安裝的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/simple我的第一個tornado程序 import tornado.web import tornado.ioloopclass IndexHandler(tornado.web.RequestHandler):主頁處理…

python99乘法表while翻譯_Python學習之while練習--九九乘法表

效果如下&#xff1a;實現代碼;m 1n 1while(m<10):while(n<m):print(n,"*",m,"",m*n,end \t)n 1print(\n)n 1m 1解析&#xff1a;這是一個很簡單的while嵌套程序&#xff0c;首先分析九九乘法表是從上往下逐行增加&#xff0c;且第一列乘積為1…

ASP.NET Core 2加入了Razor頁面特性

最近發布的ASP.NET Core 2.0&#xff0c;連同新發布的.NET Core 2和Entity Framework Core 2.0y&#xff0c;一并構成了.NET Core 2.0生態中的三元組。此發布給出了多個新特性和改進&#xff0c;其中包括通用性能的改進、Razor頁面、新的開發模板以及更好的Azure Diagnostics支…

matlab 矩陣拼接

E[a&#xff0c;b]%水平方向上的拼接 E[a &#xff1b;b] %垂直方向上的拼接 轉載于:https://www.cnblogs.com/hsy1941/p/7124083.html

JM8.5中的7種宏塊模式問題 - zhoujunming的專欄 - CSDN博客

JM8.5中的7種宏塊模式問題 收藏 Outline: 1、 CFG文件中有關可變尺寸宏塊模式的相關選項2、 7種宏塊模式對應的數值常量3、 7種宏塊模式被分成宏塊和亞宏塊4、 如何對宏塊和亞宏塊的運動估計&#xff0c;采用一個共同的函數來處理5、 遺留問題1、CFG文件中有關可變尺寸宏塊…

tornado學習筆記day02-進階與提升

整理基礎工程 請看第一天的配置文件目錄,搭建了一個框架的基礎目錄 Application settings debug 作用 可以設置tornado是否工作在調試模式下面,默認為false,即工作在生產模式下 true的特性: 自動重啟: tornado程序會監控源代碼文件,會自動重啟服務器,減少我們手動重啟…