Flask
Flask
Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。
Flask也被稱為“microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。
Flask是一個輕量級的可定製框架,使用Python語言編寫,較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結合MVC模式進行開發,開發人員分工合作,小型團隊在短時間內就可以完成功能豐富的中小型網站或Web服務的實現。另外,Flask還有很強的定製性,用戶可以根據自己的需求來添加相應的功能,在保持核心功能簡單的同時實現功能的豐富與擴展,其強大的插件庫可以讓用戶實現個性化的網站定製,開發出功能強大的網站。
Flask是目前十分流行的web框架,採用Python編程語言來實現相關功能。它被稱為微框架(microframework),“微”並不是意味著把整個Web應用放入到一個Python文件,微框架中的“微”是指Flask旨在保持代碼簡潔且易於擴展,Flask框架的主要特徵是核心構成比較簡單,但具有很強的擴展性和兼容性,程序員可以使用Python語言快速實現一個網站或Web服務。一般情況下,它不會指定資料庫和模板引擎等對象,用戶可以根據需要自己選擇各種資料庫。Flask自身不會提供表單驗證功能,在項目實施過程中可以自由配置,從而為應用程序開發提供資料庫抽象層基礎組件,支持進行表單數據合法性驗證、文件上傳處理、用戶身份認證和資料庫集成等功能。Flask主要包括Werkzeug和Jinja2兩個核心函數庫,它們分別負責業務處理和安全方面的功能,這些基礎函數為web項目開發過程提供了豐富的基礎組件。Werkzeug庫十分強大,功能比較完善,支持URL路由請求集成,一次可以響應多個用戶的訪問請求;支持Cookie和會話管理,通過身份緩存數據建立長久連接關係,並提高用戶訪問速度;支持互動式Javascript調試,提高用戶體驗;可以處理HTTP基本事務,快速響應客戶端推送過來的訪問請求。Jmja2庫支持自動HTML轉移功能,能夠很好控制外部黑客的腳本攻擊。系統運行速度很快,頁面載入過程會將源碼進行編譯形成python位元組碼,從而實現模板的高效運行;模板繼承機制可以對模板內容進行修改和維護,為不同需求的用戶提供相應的模板。目前Python的web框架有很多。除了Flask,還有ojango、Web2py等等。其中Diango是目前Python的框架中使用度最高的。但是Django如同java的EJB(EnterpriseJavaBeansJavaEE伺服器端組件模型)多被用於大型網站的開發,但對於大多數的小型網站的開發,使用SSH(Struts+Spring+Hibemat的一個JavaEE集成框架)就可以滿足,和其他的輕量級框架相比較,Flask框架有很好的擴展性,這是其他Web框架不可替代的。
Flask的基本模式為在程序里將一個視圖函數分配給一個URL,每當用戶訪問這個URL時,系統就會執行給該URL分配好的視圖函數,獲取函數的返回值並將其顯示到瀏覽器上,其工作過程見圖。
目前,我國市場上大部分智能交通系統控制平台採用的都是C/S模式,對終端要求較高,且安裝繁瑣。部分的平台也有採用基於B/S模式傳統框架,但這些框架的一些功能大多被固定,缺乏靈活性。採用Flask微型框架做伺服器的後台開發,Flask是基於Python開發的框架,類似的框架還有Django、Tornado等,之所選擇Flask來開發,原因如下:
一、後續的基於機器學習的車輛檢測與屬性識別演演算法研究,主要開發語言也是應用Python,整個系統統一開發語言,便於開發和後期維護。
二、Flask因為靈活、輕便且高效的特點被業界認可,同時擁有基於Werkzeug、Jinja2等一些開源庫,擁有內置伺服器和單元測試,適配RESTful,支持安全的cookies,而且官方文檔完整,便於學習掌握。
三、Flask中擁有靈活的Jinja2模板引擎,提高了前端代碼的復用率。這樣可以提高開發效率和有利於後期開發與維護。在現有標準中,Flask算是微小型框架。Flask有兩個主要依賴:路由、調試和Web伺服器網關介面(WebServerGatewayInterface,WSGI)子系統由Werkzeug提供;模板系統由Jinja2提供。Werkzeug和Jinja2都是由Flask的核心開發者開發而成。對於資料庫訪問、驗證Web表單和用戶身份認證等一系列功能,Flask框架是不支持的。這些功能都是以擴展組件的方式進行實現,然後再與Flask框架集成。開發者可以根據項目的需求進行相應的擴展,或者自行開發。這與大型框架恰恰相反,大型框架本身做出了大部分決定,難以靈活改變方案。