馬繼昌 李建兵 劉玉冬 遼寧科技大學(xué)國(guó)際金融與銀行學(xué)院
Python語(yǔ)言是誕生于1989年的一門(mén)高級(jí)編程語(yǔ)言,由于其編寫(xiě)的腳本程序簡(jiǎn)單易懂,語(yǔ)法易于理解,使得初學(xué)者入門(mén)容易,而且深入學(xué)習(xí)下去,可以編寫(xiě)出復(fù)雜的程序,因此越來(lái)越受到人們的歡迎,近來(lái)更是一直處于TIOBE編程語(yǔ)言排行榜前三名的位置。
Python語(yǔ)言憑借易于維護(hù)、擴(kuò)展庫(kù)豐富、跨平臺(tái)、可移植,并能夠支持主流商業(yè)數(shù)據(jù)庫(kù)、以及GUI編程及可嵌入的特點(diǎn),廣泛應(yīng)用在web開(kāi)發(fā)、數(shù)據(jù)分析、游戲開(kāi)發(fā)、系統(tǒng)運(yùn)維、人工智能、物聯(lián)網(wǎng)等行業(yè)中。
WEB編程技術(shù)主要用于進(jìn)行網(wǎng)站建設(shè),很多網(wǎng)站使用Python語(yǔ)言進(jìn)行開(kāi)發(fā)。Python作為一門(mén)通用的編程語(yǔ)言,同樣適合于WEB開(kāi)發(fā)領(lǐng)域。在使用Python開(kāi)發(fā)WEB項(xiàng)目時(shí),可以有多種Web框架進(jìn)行選擇,如Django、Flask、Tornado等,其中Flask是用 Python 編寫(xiě)的輕量級(jí)WEB應(yīng)用框架,它其實(shí)是 協(xié)助開(kāi)發(fā)者快速開(kāi)發(fā)Web應(yīng)用程序的一套功能代碼。Flask自開(kāi)發(fā)伊始就被設(shè) 計(jì)為可擴(kuò)展的框架,它具有一個(gè)包含基本服務(wù)的強(qiáng)健核心,其他功能則可通過(guò)擴(kuò)展實(shí)現(xiàn)。Flask WSGI 組件采用 Werkzeug,模板渲染引擎采用Jinja2。Flask框架的核心是路由模塊werkzeug及模板引擎 Jinja2,F(xiàn)lask常用的擴(kuò)展包有操作數(shù)據(jù)庫(kù)的Flask-SQLalchemy,用于插入腳本的Flask-script,管理遷移數(shù)據(jù)庫(kù)的Flask-migrate以及Session存儲(chǔ)方式指定的Flask-Session。
MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設(shè)計(jì)創(chuàng)建 Web 應(yīng)用程序的模式:
Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分,通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。Controller(控制器)是應(yīng)用程序中處理用戶(hù)交互的部分,負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶(hù)輸入,并向模型發(fā)送數(shù)據(jù)。MVC 分層有助于管理復(fù)雜的應(yīng)用程序,是程序員在一個(gè)時(shí)間內(nèi)專(zhuān)門(mén)關(guān)注一個(gè)方面,同時(shí)也讓?xiě)?yīng)用程序的測(cè)試更加容易。MVC 分層同時(shí)也簡(jiǎn)化了分組開(kāi)發(fā)。不同的開(kāi)發(fā)人員可同時(shí)開(kāi)發(fā)視圖、控制器邏輯和業(yè)務(wù)邏輯。
程序初始化代碼如下:
所有 Flask 程序都必須創(chuàng)建一個(gè)程序?qū)嵗?。Web 服務(wù)器使用Web 服務(wù)器網(wǎng)關(guān)接口 WSGI協(xié)議,把接收自客戶(hù)端的所有請(qǐng)求都轉(zhuǎn)交給這個(gè)對(duì)象處理。程序?qū)嵗齛pp是 Flask 類(lèi)的對(duì)象。Flask類(lèi)的構(gòu)造函數(shù)只有一個(gè)必須指定的參數(shù),即程序主模塊或包的名字。在大多數(shù)程序 中,Python 的 __name__ 變量就是所需的值。將構(gòu)造函數(shù)的 name 參數(shù)傳給 Flask 程序,F(xiàn)lask 用這個(gè)參數(shù)決定程序的根目錄,以便稍后能夠找到相對(duì)于程 序根目錄的資源文件位置。
客戶(hù)端(例如 Web 瀏覽器)把請(qǐng)求發(fā)送給 Web 服務(wù)器,Web服務(wù)器再把請(qǐng)求發(fā)送給程序?qū)嵗?。程序?qū)嵗枰缹?duì)每個(gè) URL請(qǐng)求運(yùn)行哪些代碼,所以保存了一個(gè)URL 到Python 函數(shù)的映射關(guān)系。處理 URL 和函數(shù)之間關(guān)系的程序稱(chēng)為路由。在Flask程序中定義路由的最簡(jiǎn)便方式,是使用程序?qū)嵗峁┑?app.route 修飾器,把修飾的函數(shù)注冊(cè)為路由。下面的例子說(shuō)明了如何使用這個(gè)修飾器聲明路由:
像home() 這樣的函數(shù)稱(chēng)為視圖函數(shù)(view function)。視圖函數(shù)返回的響應(yīng)可以是包含 HTML 的簡(jiǎn)單字符串,也可以是復(fù)雜的表單。
程序用run方法啟動(dòng)Flask集成的開(kāi)發(fā)Web服務(wù)器:
__name__=='__main__' 是Python的常用方法,在這里確保直接執(zhí)行這個(gè)腳本時(shí)才啟動(dòng)Web服務(wù)器。
在編寫(xiě)URL處理函數(shù)時(shí),除了配置URL外,從HTTP請(qǐng)求拿到用戶(hù)數(shù)據(jù)也是非常重要的。Web框架都提供了自己的API來(lái)實(shí)現(xiàn)這些功能。Flask通過(guò)request.form['name']來(lái)獲取表單的內(nèi)容。
Web應(yīng)用不僅僅是處理邏輯,前端展示給用戶(hù)的HTML頁(yè)面也非常重要。HTML不僅要正確,還要通過(guò)CSS美化,再加上復(fù)雜的JavaScript腳本來(lái)實(shí)現(xiàn)各種交互和動(dòng)畫(huà)效果。因此生成HTML頁(yè)面的難度很大。使用模板技術(shù)使得這一過(guò)程變得相對(duì)容易。模板是一個(gè)包含響應(yīng)文本的文件,其中包含用占位變量表示的動(dòng)態(tài)部分,其具體值只在請(qǐng)求的上下文中才能知道。使用真實(shí)值替換變量,再返回最終得到的響應(yīng)字符串,這一過(guò)程稱(chēng)為渲染。為了渲染模板,F(xiàn)lask使用了一個(gè)名為Jinja2的強(qiáng)大模板引擎。
通 過(guò)MVC在Python代 碼 中 處 理M:Model和C:Controller,而V:View是通過(guò)模板處理的,這樣就成功地把Python代碼和HTML代碼最大限度地分離了。
使用模板的另一大好處是,模板改起來(lái)很方便,而且,改完保存后,刷新瀏覽器就能看到最新的效果,這對(duì)于調(diào)試HTML、CSS和JavaScript的前端工程師來(lái)說(shuō)非常重要。在Jinja2模板中,用{{name }}表示一個(gè)需要替換的變量。很多時(shí)候,還需要循環(huán)、條件判斷等指令語(yǔ)句,在Jinja2中,用{%... %}表示指令。
此外,F(xiàn)lask還有許多擴(kuò)展程序包可供開(kāi)發(fā)時(shí)使用,如用于高性能數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的SQLAlchemy和用于表單編程的WTForm等等。
通過(guò)以上簡(jiǎn)單的步驟,使用Flask框架結(jié)合MVC編程模式,可以快速實(shí)現(xiàn)網(wǎng)站的開(kāi)發(fā),如果在網(wǎng)站中融入Bootstrap等前端模板,就可以開(kāi)發(fā)出非常漂亮的基于Html5的響應(yīng)式網(wǎng)站,相比其他開(kāi)發(fā)語(yǔ)言,具有快速高效的優(yōu)勢(shì)。