Python搭建網(wǎng)站,利用現(xiàn)成的框架還是挺簡(jiǎn)單的。在這里舉一個(gè)例子-利用Flask搭建一個(gè)網(wǎng)站。
Flask
Flask是一個(gè)使用Python編寫(xiě)的輕量級(jí)Web應(yīng)用框架。其WSGI工具箱采用Werkzeug,模板引擎則使用Jinja2。Flask創(chuàng)建一個(gè)應(yīng)用很簡(jiǎn)單,只需要一行代碼就可以創(chuàng)建一個(gè)應(yīng)用。一個(gè)最小的應(yīng)用看起來(lái)像這樣:
直接執(zhí)行pythonhello.py,就可以看到頁(yè)面就可以訪問(wèn)了,這只是官方給出的一個(gè)示例,方便學(xué)習(xí)。
應(yīng)用初始化
所有Flask程序都必須創(chuàng)建一個(gè)程序?qū)嵗eb服務(wù)器使用一種名為Web服務(wù)器網(wǎng)關(guān)接口(WebServerGatewayInterface,WSGI)的協(xié)議,把接收自客戶端的所有請(qǐng)求都轉(zhuǎn)交給這個(gè)對(duì)象處理。程序?qū)嵗荈lask類的對(duì)象,經(jīng)常使用下述代碼創(chuàng)建:
Flask類的構(gòu)造函數(shù)只有一個(gè)必須指定的參數(shù),即程序主模塊或包的名字。在大多數(shù)程序中,Python的__name__變量就是所需的值。
路由和視圖函數(shù)
客戶端(例如Web瀏覽器)把請(qǐng)求發(fā)送給Web服務(wù)器,Web服務(wù)器再把請(qǐng)求發(fā)送給Flask程序?qū)嵗3绦驅(qū)嵗枰缹?duì)每個(gè)URL請(qǐng)求運(yùn)行哪些代碼,所以保存了一個(gè)URL到Python函數(shù)的映射關(guān)系。處理URL和函數(shù)之間關(guān)系的程序稱為路由。在Flask程序中定義路由的最簡(jiǎn)便方式,是使用程序?qū)嵗峁┑腶pp.route修飾器,把修飾的函數(shù)注冊(cè)為路由。下面的例子說(shuō)明了如何使用這個(gè)修飾器聲明路由:
index()函數(shù)注冊(cè)為程序根地址的處理程序。如果部署程序的服務(wù)器域名為www.example.com,在瀏覽器中訪問(wèn)http://www.example.com后,會(huì)觸發(fā)服務(wù)器執(zhí)行index()函數(shù)。這個(gè)函數(shù)的返回值稱為響應(yīng),是客戶端接收到的內(nèi)容。如果客戶端是Web瀏覽器,響應(yīng)就是顯示給用戶查看的文檔。
啟動(dòng)服務(wù)器
程序?qū)嵗胷un方法啟動(dòng)Flask集成的開(kāi)發(fā)Web服務(wù)器:
__name__=='__main__'是Python的慣常用法,在這里確保直接執(zhí)行這個(gè)腳本時(shí)才啟動(dòng)開(kāi)發(fā)Web服務(wù)器。如果這個(gè)腳本由其他腳本引入,程序假定父級(jí)腳本會(huì)啟動(dòng)不同的服務(wù)器,因此不會(huì)執(zhí)行app.run()。服務(wù)器啟動(dòng)后,會(huì)進(jìn)入輪詢,等待并處理請(qǐng)求。輪詢會(huì)一直運(yùn)行,直到程序停止,比如按Ctrl-C鍵。
Flask開(kāi)發(fā)的網(wǎng)站實(shí)例
本示例中網(wǎng)站的結(jié)構(gòu)如下
啟動(dòng)服務(wù)器界面
訪問(wèn)WEB頁(yè)面
整個(gè)是利用Flask自己搭建的一個(gè)WEB頁(yè)面,數(shù)據(jù)庫(kù)試過(guò)mysql和mongodb都可以正常訪問(wèn)。整體感覺(jué)Flask的學(xué)習(xí)成本會(huì)比Django低,而且也比Django更靈活。