高併發處理框架—— tornado
tornado 是使用 python 編寫的乙個強大的可擴充套件的 web 伺服器。它在處理高網路流量時表現得足夠強健,卻在建立和編寫時有著足夠的輕量級,並能夠被用在大量的應用和工具中。tornado 作為 friendfeed **的基礎框架,於2023年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 測試專案。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 inte***ce)具有很強的伸縮性且能執行於多執行緒或多程序環境下,因為 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 框架的特點
相對於 python 的其他 web 框架,django 的功能是最完整的,django 定義了服務發布、路由對映、模板程式設計、資料處理的一整套功能。這也意味著 django模組之間緊密耦合,開發者需要學習 django 自己定義的這一整套技術。django的主要特點如下。
整合資料訪問元件:django 的 model 層自帶資料庫 orm 元件,使開發者無須學習其他資料庫訪問技術(dbi、sqlalchemy 等)。
強大的 url 對映技術:django 使用正規表示式管理 url 對映,因此給開發者帶來了極高的靈活性。
後台管理系統自動生成:開發者只需通過簡單的幾行配置和**就可以實現完整的後台資料管理 web 控制台。
錯誤資訊非常完整:在開發除錯過程中如果出現執行異常,則 django 可以提供非常完整的錯誤資訊幫助開發者定位問題,比如缺少***元件的配置引用等,這樣可以使開發者馬上改正錯誤。
django 的組成結構
django 是遵循mvc架構的web開發框架,其主要由以下幾部分組成。
管理工具(management):一套內建的建立站點、遷移資料、維護靜態檔案的命令工具。
模型(model):提供資料訪問介面和模組,包括資料字段、元資料、資料關係等的定義及操作。
檢視(view):django 的檢視層封裝了 http request 和 response 的一系列操作和資料流,其主要功能包括url對映機制、繫結模板等。
模板(template):是一套 django 自己的頁面渲染模板語言,用若干內建的tags和filters定義頁面的生成方式。
表單(form):通過內建的資料型別和控制項生成 html 表單。
四大主流資料庫比較
一 開放性 1.sql server 只能在windows上執行,沒有絲毫的開放性,作業系統的系統的穩定對資料庫是十分重要的。windows9x系列產品是偏重於桌面應用,nt server只適合中小型企業。而且windows平台的可靠性,安全性和伸縮性是非常有限的。它不象unix那樣久經考驗,尤其是...
python變數作用域(四大)
python四大作用域 python 作用域 scope 和 legb legb 分別是 locals 是函式內的名字空間,包括區域性變數和形參 enclosing 外部巢狀函式的名字空間 閉包中常見 globals 全域性變數,函式定義所在模組的名字空間 builtins 內建模組的名字空間 而查...
python 反射四大函式介紹
getattr 函式用於返回乙個物件屬性值。getattr 語法 getattr object,name default 返回物件屬性值或者方法的引用。如果是返回的物件的方法,返回的是方法的記憶體位址,如果需要執行這個方法,可以在後面新增一對括號。class test name xiaohua de...