摘要:前言在文章基于環(huán)境搭建框架方法介紹中介紹了客戶端和服務(wù)器的交互過程,服務(wù)器接收客戶端的請求后,由應(yīng)用服務(wù)器對瀏覽器的請求進(jìn)行處理,將生成的響應(yīng)傳遞給服務(wù)器,再由服務(wù)器返回給客戶端。
前言
在文章《基于Linux環(huán)境搭建Nginx+uWSGI+Python框架方法介紹》中介紹了客戶端和Web服務(wù)器的交互過程,Web服務(wù)器接收客戶端的請求后,由Web應(yīng)用服務(wù)器對瀏覽器的請求進(jìn)行處理,將生成的響應(yīng)傳遞給Web服務(wù)器,再由Web服務(wù)器返回給客戶端。為了簡化Web網(wǎng)站的開發(fā),使開發(fā)者可以專注于編寫業(yè)務(wù)邏輯代碼而無需關(guān)心Web應(yīng)用服務(wù)器內(nèi)各模塊連接之類的重復(fù)性工作,繼而在Web應(yīng)用服務(wù)器上產(chǎn)生了Web框架。一般Web框架的架構(gòu)如下圖所示,基于Python的Web框架如Django、tornado、flask、webpy等都在這個范圍內(nèi)進(jìn)行不同的調(diào)整。
MVC是眾所周知的Web框架設(shè)計模式,即將應(yīng)用程序分解成model(模型)、view(視圖)和 controller(控制器)三個組成部分。用戶輸入 URL,客戶端發(fā)送請求,控制器(Controller)首先會拿到請求,然后用模型(Models)從數(shù)據(jù)庫取出所有需要的數(shù)據(jù)進(jìn)行必要的處理,將處理后的結(jié)果發(fā)送給視圖(View),視圖利用獲取到的數(shù)據(jù)進(jìn)行渲染生成 Html返回給客戶端。MVC設(shè)計模式將業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離,業(yè)務(wù)邏輯聚集到一個模塊中,使得在更改界面時無需重新編寫業(yè)務(wù)邏輯,提高網(wǎng)站的維護性。
相較與大而全的Django框架來說非常輕量級的開源Python Web框架Web.py,它小巧靈活、簡單并且強大,在使用時沒有任何限制。目前Web.py被廣泛運用于大型網(wǎng)站,如西班牙的社交網(wǎng)站Frinki、主頁日平均訪問量達(dá)7000萬次的Yandex等。下面通過Get和Post實現(xiàn)例程來介紹下Web.py的應(yīng)用。
1) web.py的安裝
web.py下載地址:http://webpy.org/static/web.p...。解壓并拷貝web.py-0.38文件夾到目錄下運行:
python setup.py install(sudo python setup.py install)
2)Python例程——GET
在Web.py中URL的請求映射于urls元組中,元組結(jié)構(gòu)第一部分為匹配URL的正則表達(dá)式,第二部分為接受請求的類名稱。app= web.application(urls, globals())創(chuàng)建一個列舉URL列表的應(yīng)用,該應(yīng)用會在文件的全局命名空間中查找對應(yīng)類。如"/"完全匹配URLhttp://0.0.0.0:8080/;"/task/d"匹配"/task/"開頭而后為任意1個數(shù)字的URL;"/(.*)"匹配"/"后任意內(nèi)容作為參數(shù)返回,類中需有參數(shù)接收。
在Html代碼中使用了Web.py支持的模板引擎Templetor,模板引擎的用途是使界面與數(shù)據(jù)分離,界面模板經(jīng)過模板引擎的渲染后會生成最終的界面文件。如第一行$def with (name)定義了一個變量name;$name會用name的值來替換。
templates目錄下存放.html模板文件,render = web.template.render("templates/") 生成render會從模板目錄查找文件,render.hello(..)表示渲染 hello.html 模板。
當(dāng)然Web.py也支持使用Jinja2模板引擎,由于Jinja2屬于第三方庫需要多帶帶安裝,在py文件中執(zhí)行render = render_jinja("templates",encoding = "utf-8")更換為Jinja2模板引擎,在html文件中可按照J(rèn)inja2支持的語法進(jìn)行編寫,這樣就能使用jinja2模板引擎進(jìn)行渲染。
Python代碼:
import web render = web.template.render("templates/") urls = ( "/", "hello", #完全匹配 "/task/d", "task", #模糊匹配 "/(.*)", "anyd" #帶組匹配 正則表達(dá)式(.*)匹配/后任意內(nèi)容并作為參數(shù)返回,類中需有參數(shù)接收 ) class anyd: def GET(self,name): i=web.input(name=None) return render.index(name) class hello: def GET(self): return "Hello, world!" class task: def GET(self): name="Bob" return render.index(name) if __name__ == "__main__": app = web.application(urls, globals()) app.run()
html代碼:
$def with (name)#定義了一個變量 name $if name: I just wanted to say hello to $name. $else: Hello, world!
將py文件保存為mywebpy.py,web.py內(nèi)置了web服務(wù)器,運行后顯示http://0.0.0.0:8080/即啟動了服務(wù)器。在瀏覽器中輸入http://127.0.0.1:8080會顯示Hello,world!,在瀏覽器中輸入http://127.0.0.1:8080/task/1會顯示I just wanted to say hello to Bob, 在瀏覽器中輸入http://127.0.0.1:8080/Tom顯示I just wanted to say hello to Tom
注:在調(diào)試中ps查看web服務(wù)器進(jìn)程ID,kill當(dāng)前進(jìn)程后才能重新啟動服務(wù)器,否則會提示No socket could be created錯誤
3) Python例程——POST
Web.py中"web.form"模塊支持表單的創(chuàng)建、校驗和顯示。該模塊包含一個"Form"對象和各種輸入框類如Textbox、Password 、Textarea 、Dropdown、Radio、Checkbox、Button等。 Form對象的validates方法可以驗證Form對象中inputs是否有效。只有調(diào)用了validates方法,F(xiàn)orm對象的各個inputs才會有相應(yīng)的值,否則其值均為None。validates方法內(nèi)部默認(rèn)會使用web.input()來作為數(shù)據(jù)來源去驗證,也可以使用source參數(shù)指定數(shù)據(jù)來源。同樣可以使用Form對象中Validator來校驗表單。以下例程中在填寫表格Post提交后,如果password和password_again值相同,那么會顯示"HAHA!",否則顯示"Try again, Passwords didn"t match:"。
Python代碼:
import web,os from web import form render = web.template.render("templates") urls = ( "/", "index", ) app = web.application(urls, globals()) login = form.Form( form.Textbox("username"), form.Password("password"), form.Password("password_again"), form.Checkbox("YES"), form.Checkbox("NO"), form.Textarea("Moe"), form.Dropdown("SEX", ["man", "woman"]), form.Radio("time",["2012-01-01","20120101"]), form.Button("Login"), validators = [form.Validator("Passwords didn"t match.", lambda i: i.password == i.password_again)] ) class index: def GET(self): f=login() return render.formtest(f) def POST(self): f=login() if not f.validates(): return render.formtest(f) else: return "HAHA!" if __name__ == "__main__": web.internalerror = web.debugerror app.run()
html代碼:
$def with (form)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41530.html
摘要:最大的特點就是其支持異步,所以它有著優(yōu)異的性能。的代碼結(jié)構(gòu)可以在其官網(wǎng)了解,本文著重分析的實現(xiàn)。事件驅(qū)動模型的大致思路的方法用于啟動事件循環(huán)。行文比較草率,如有錯誤和不足之處,敬請指正。 0. 簡介 tornado是一個用Python語言寫成的Web服務(wù)器兼Web應(yīng)用框架,由FriendFeed公司在自己的網(wǎng)站FriendFeed中使用,被Facebook收購以后框架以開源軟件形式開放...
摘要:輕量級框架是一個輕量級框架,包含多維數(shù)據(jù)分析和瀏覽聚合數(shù)據(jù)等工具。創(chuàng)造矢量地圖的輕量級框架是一個庫,用來為生成地圖。異步非阻塞的框架的全稱是,傳說中性能高高的框架。 如果你正在學(xué)習(xí)python,那么這10個開源框架,你可千萬別錯過,這些框架包括事件I/O,OLAP,Web開發(fā),高性能網(wǎng)絡(luò)通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你了。 1.Django: Python Web應(yīng)...
摘要:通信服務(wù)提供接口是如何與區(qū)塊鏈交互的關(guān)鍵。這通常通過將請求提交給基于或套接字的服務(wù)器來完成。初始化時會發(fā)生自動檢測有時,無法自動檢測節(jié)點的位置。使用自動檢測的示例一些節(jié)點提供超出標(biāo)準(zhǔn)的。是套接字的文件系統(tǒng)路徑。 通信服務(wù)提供接口是web3如何與區(qū)塊鏈交互的關(guān)鍵。接口接受JSON-RPC請求并返回響應(yīng)。這通常通過將請求提交給基于HTTP或IPC套接字的服務(wù)器來完成。 如果你已經(jīng)愉快地連接...
摘要:通信服務(wù)提供接口是如何與區(qū)塊鏈交互的關(guān)鍵。這通常通過將請求提交給基于或套接字的服務(wù)器來完成。初始化時會發(fā)生自動檢測有時,無法自動檢測節(jié)點的位置。使用自動檢測的示例一些節(jié)點提供超出標(biāo)準(zhǔn)的。是套接字的文件系統(tǒng)路徑。 通信服務(wù)提供接口是web3如何與區(qū)塊鏈交互的關(guān)鍵。接口接受JSON-RPC請求并返回響應(yīng)。這通常通過將請求提交給基于HTTP或IPC套接字的服務(wù)器來完成。 如果你已經(jīng)愉快地連接...
摘要:使用基于以太坊的智能合約的集成開發(fā)環(huán)境。以太坊教程,主要介紹智能合約與應(yīng)用開發(fā),適合入門。以太坊,主要是介紹使用進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建交易轉(zhuǎn)賬代幣開發(fā)以及過濾器和事件等內(nèi)容。 Solidity是一種以智能合約為導(dǎo)向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發(fā)基于以太坊數(shù)字貨幣的智能合約。 理解它官方文檔應(yīng)該是學(xué)習(xí)Solidity的最佳來源:solidity.read...
閱讀 577·2021-11-18 10:02
閱讀 1062·2021-11-02 14:41
閱讀 689·2021-09-03 10:29
閱讀 1902·2021-08-23 09:42
閱讀 2745·2021-08-12 13:31
閱讀 1210·2019-08-30 15:54
閱讀 1964·2019-08-30 13:09
閱讀 1438·2019-08-30 10:55