Python四大主流網絡編程框架,你知道麼?

高併發處理框架—— 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

以上講到的 2個 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等特性來支持異步編程。

企業級開發框架——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,快速生成後臺數據管理網站。

*聲明:本文於網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章