成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于Linux環(huán)境的Web.py框架介紹

caikeal / 3157人閱讀

摘要:前言在文章基于環(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模式

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)站的維護性。


Web.py框架

相較與大而全的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)
$if not form.valid:

Try again,Passwords didn"t match:

$:form.render()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41530.html

相關(guān)文章

  • tornado源碼解析之IOLoop

    摘要:最大的特點就是其支持異步,所以它有著優(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收購以后框架以開源軟件形式開放...

    Lsnsh 評論0 收藏0
  • 獻(xiàn)給正在學(xué)習(xí)python你,10個最受歡迎Python開源框架

    摘要:輕量級框架是一個輕量級框架,包含多維數(shù)據(jù)分析和瀏覽聚合數(shù)據(jù)等工具。創(chuàng)造矢量地圖的輕量級框架是一個庫,用來為生成地圖。異步非阻塞的框架的全稱是,傳說中性能高高的框架。 如果你正在學(xué)習(xí)python,那么這10個開源框架,你可千萬別錯過,這些框架包括事件I/O,OLAP,Web開發(fā),高性能網(wǎng)絡(luò)通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你了。 1.Django: Python Web應(yīng)...

    Paul_King 評論0 收藏0
  • python借助web3py與以太坊區(qū)塊鏈節(jié)點交互幾種方式

    摘要:通信服務(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)愉快地連接...

    booster 評論0 收藏0
  • python借助web3py與以太坊區(qū)塊鏈節(jié)點交互幾種方式

    摘要:通信服務(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)愉快地連接...

    vboy1010 評論0 收藏0
  • 2018以太坊智能合約編程語言solidity最佳IDEs

    摘要:使用基于以太坊的智能合約的集成開發(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...

    darkerXi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<