摘要:前言在文章基于環境搭建框架方法介紹中介紹了客戶端和服務器的交互過程,服務器接收客戶端的請求后,由應用服務器對瀏覽器的請求進行處理,將生成的響應傳遞給服務器,再由服務器返回給客戶端。
前言
在文章《基于Linux環境搭建Nginx+uWSGI+Python框架方法介紹》中介紹了客戶端和Web服務器的交互過程,Web服務器接收客戶端的請求后,由Web應用服務器對瀏覽器的請求進行處理,將生成的響應傳遞給Web服務器,再由Web服務器返回給客戶端。為了簡化Web網站的開發,使開發者可以專注于編寫業務邏輯代碼而無需關心Web應用服務器內各模塊連接之類的重復性工作,繼而在Web應用服務器上產生了Web框架。一般Web框架的架構如下圖所示,基于Python的Web框架如Django、tornado、flask、webpy等都在這個范圍內進行不同的調整。
MVC是眾所周知的Web框架設計模式,即將應用程序分解成model(模型)、view(視圖)和 controller(控制器)三個組成部分。用戶輸入 URL,客戶端發送請求,控制器(Controller)首先會拿到請求,然后用模型(Models)從數據庫取出所有需要的數據進行必要的處理,將處理后的結果發送給視圖(View),視圖利用獲取到的數據進行渲染生成 Html返回給客戶端。MVC設計模式將業務邏輯、數據、界面顯示分離,業務邏輯聚集到一個模塊中,使得在更改界面時無需重新編寫業務邏輯,提高網站的維護性。
相較與大而全的Django框架來說非常輕量級的開源Python Web框架Web.py,它小巧靈活、簡單并且強大,在使用時沒有任何限制。目前Web.py被廣泛運用于大型網站,如西班牙的社交網站Frinki、主頁日平均訪問量達7000萬次的Yandex等。下面通過Get和Post實現例程來介紹下Web.py的應用。
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元組中,元組結構第一部分為匹配URL的正則表達式,第二部分為接受請求的類名稱。app= web.application(urls, globals())創建一個列舉URL列表的應用,該應用會在文件的全局命名空間中查找對應類。如"/"完全匹配URLhttp://0.0.0.0:8080/;"/task/d"匹配"/task/"開頭而后為任意1個數字的URL;"/(.*)"匹配"/"后任意內容作為參數返回,類中需有參數接收。
在Html代碼中使用了Web.py支持的模板引擎Templetor,模板引擎的用途是使界面與數據分離,界面模板經過模板引擎的渲染后會生成最終的界面文件。如第一行$def with (name)定義了一個變量name;$name會用name的值來替換。
templates目錄下存放.html模板文件,render = web.template.render("templates/") 生成render會從模板目錄查找文件,render.hello(..)表示渲染 hello.html 模板。
當然Web.py也支持使用Jinja2模板引擎,由于Jinja2屬于第三方庫需要多帶帶安裝,在py文件中執行render = render_jinja("templates",encoding = "utf-8")更換為Jinja2模板引擎,在html文件中可按照Jinja2支持的語法進行編寫,這樣就能使用jinja2模板引擎進行渲染。
Python代碼:
import web render = web.template.render("templates/") urls = ( "/", "hello", #完全匹配 "/task/d", "task", #模糊匹配 "/(.*)", "anyd" #帶組匹配 正則表達式(.*)匹配/后任意內容并作為參數返回,類中需有參數接收 ) 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內置了web服務器,運行后顯示http://0.0.0.0:8080/即啟動了服務器。在瀏覽器中輸入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
注:在調試中ps查看web服務器進程ID,kill當前進程后才能重新啟動服務器,否則會提示No socket could be created錯誤
3) Python例程——POST
Web.py中"web.form"模塊支持表單的創建、校驗和顯示。該模塊包含一個"Form"對象和各種輸入框類如Textbox、Password 、Textarea 、Dropdown、Radio、Checkbox、Button等。 Form對象的validates方法可以驗證Form對象中inputs是否有效。只有調用了validates方法,Form對象的各個inputs才會有相應的值,否則其值均為None。validates方法內部默認會使用web.input()來作為數據來源去驗證,也可以使用source參數指定數據來源。同樣可以使用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)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41530.html
摘要:最大的特點就是其支持異步,所以它有著優異的性能。的代碼結構可以在其官網了解,本文著重分析的實現。事件驅動模型的大致思路的方法用于啟動事件循環。行文比較草率,如有錯誤和不足之處,敬請指正。 0. 簡介 tornado是一個用Python語言寫成的Web服務器兼Web應用框架,由FriendFeed公司在自己的網站FriendFeed中使用,被Facebook收購以后框架以開源軟件形式開放...
摘要:輕量級框架是一個輕量級框架,包含多維數據分析和瀏覽聚合數據等工具。創造矢量地圖的輕量級框架是一個庫,用來為生成地圖。異步非阻塞的框架的全稱是,傳說中性能高高的框架。 如果你正在學習python,那么這10個開源框架,你可千萬別錯過,這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你了。 1.Django: Python Web應...
摘要:通信服務提供接口是如何與區塊鏈交互的關鍵。這通常通過將請求提交給基于或套接字的服務器來完成。初始化時會發生自動檢測有時,無法自動檢測節點的位置。使用自動檢測的示例一些節點提供超出標準的。是套接字的文件系統路徑。 通信服務提供接口是web3如何與區塊鏈交互的關鍵。接口接受JSON-RPC請求并返回響應。這通常通過將請求提交給基于HTTP或IPC套接字的服務器來完成。 如果你已經愉快地連接...
摘要:通信服務提供接口是如何與區塊鏈交互的關鍵。這通常通過將請求提交給基于或套接字的服務器來完成。初始化時會發生自動檢測有時,無法自動檢測節點的位置。使用自動檢測的示例一些節點提供超出標準的。是套接字的文件系統路徑。 通信服務提供接口是web3如何與區塊鏈交互的關鍵。接口接受JSON-RPC請求并返回響應。這通常通過將請求提交給基于HTTP或IPC套接字的服務器來完成。 如果你已經愉快地連接...
摘要:使用基于以太坊的智能合約的集成開發環境。以太坊教程,主要介紹智能合約與應用開發,適合入門。以太坊,主要是介紹使用進行智能合約開發交互,進行賬號創建交易轉賬代幣開發以及過濾器和事件等內容。 Solidity是一種以智能合約為導向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發基于以太坊數字貨幣的智能合約。 理解它官方文檔應該是學習Solidity的最佳來源:solidity.read...
閱讀 566·2021-11-18 10:02
閱讀 1048·2021-11-02 14:41
閱讀 674·2021-09-03 10:29
閱讀 1893·2021-08-23 09:42
閱讀 2728·2021-08-12 13:31
閱讀 1199·2019-08-30 15:54
閱讀 1952·2019-08-30 13:09
閱讀 1427·2019-08-30 10:55