青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-167  評論-8  文章-0  trackbacks-0

web.py 是一個Python 的web 框架,它簡單而且功能強(qiáng)大。web.py 是公開的,無論用于什么用途都是沒有限制的。

先讓大家感受一下web.py 的簡單而強(qiáng)大:

import web

urls = (
    '/(.*)', 'hello'
)

class hello:
    def GET(self, name):
        i = web.input(times=1)
        if not name: name = 'world'
        for c in xrange(int(i.times)): print 'Hello,', name+'!'

if __name__ == "__main__": web.run(urls, globals())

看看,上面就是一個基于web.py 的完整的Web 應(yīng)用。不信?!將上面的代碼保存為文件code.py,在命令行下執(zhí)行python code.py。然后打開你的瀏覽器,打開地址:http://localhost:8080/RossWan,看看結(jié)果 :)沒有意外的話(當(dāng)然要先安裝web.py,下面會有介紹),瀏覽器會顯示“Hello, RossWan!”。這是一個最簡單的Hello world Web 應(yīng)用。是不是很簡單?!下面將較為詳細(xì)地介紹下web.py 。Find fun :)

1. 安裝

單擊這里下載web.py 的安裝文件,將下載得到的文件web.py-0.21.tar.gz 解壓,進(jìn)入解壓后的文件夾,在命令行下執(zhí)行:python setup.py install,在Linux 等系統(tǒng)下,需要root 的權(quán)限,可以執(zhí)行:sudo python setup.py install

安裝完畢之后,就可以正式開始web.py 之旅…

2. URL 處理

對于一個站點(diǎn)來說,URL 的組織是最重要的一個部分,因?yàn)檫@是用戶看得到的部分,而且直接影響到站點(diǎn)是如何工作的,在著名的站點(diǎn)如:del.icio.us ,其URLs 甚至是網(wǎng)頁界面的一部分。而web.py 以簡單的方式就能夠構(gòu)造出一個強(qiáng)大的URLs。

在每個web.py 應(yīng)用,必須先import web 模塊:

import web

現(xiàn)在,我們須要告訴web.py URL 如何組織,讓我們以一個簡單例子開始:

urls = (
  '/', 'index'    )

在上面的例子中,第一部分(‘/’)是一個匹配URL 的正則表達(dá)式,像/,/help/faq,/item/(\d+),等等;第二部分(‘index’)是一個類名,匹配的請求將會被發(fā)送過去。

現(xiàn)在,我們需要編寫index 類。當(dāng)大部人瀏覽網(wǎng)頁的時候,他們都沒有注意到,瀏覽器是通過HTTP 跟World Wide Web 通信的。通信的細(xì)節(jié)不太重要,但要明白一點(diǎn),用戶是通過URLs(例如 / 或者 /foo?f=1)來請求web 服務(wù)器完成一定請求的(例如 GET 或者POST)。

GET 是最普遍的方法,用來請求一個頁面。當(dāng)我們在瀏覽器里輸入“harvard.edu” 的時候,實(shí)際上它是向Web 服務(wù)器請求GET ”/“。另一個常見的方法是POST,常用于提交特定類型的表單,例如利用信用卡付費(fèi)和處理一個訂單。注意,GET URLs 能夠被搜索引擎索引得到(想像一下Google 嘗試購買你網(wǎng)站上的所用物品)。

在我們的web.py 代碼中。我們清晰區(qū)分這兩種方法:

class index:
    def GET(self):
        print "Hello, world!"

當(dāng)接收到一個GET 請求時,上面的GET 方法將會被web.py 調(diào)用。

好的?,F(xiàn)在,我們只需添加最后一行代碼,讓web.py 啟動網(wǎng)頁應(yīng)用:

if __name__ == "__main__": web.run(urls, globals())

上面告訴web.py 如何配置URLs,以及找尋的類在文件中的全局命名空間。

整個code.py 文件的內(nèi)容如下:

import web

urls = (
  '/', 'index'    )

class index:
    def GET(self):
        print "Hello, world!"

if __name__ == "__main__": web.run(urls, globals())

注意到?jīng)]有,雖然我說了很多東西,但實(shí)際上web 應(yīng)用的代碼就只得上面的幾行,而且這是一個完整的web.py 應(yīng)用。在你的命令行下輸入:

$ python code.py
Launching server: http://0.0.0.0:8080/

現(xiàn)在,你的web.py 應(yīng)用已經(jīng)啟動了服務(wù)器。通過瀏覽器訪問http://localhost:8080/ 的話,會見到”Hello, world!“。在啟動服務(wù)器的時候,你可以在python code.py 后面添加IP 地址/端口 來控制web.py 啟動的服務(wù)器。例如:python code.py 8888。

3. 調(diào)試

web.py 本身也提供調(diào)試的工具。在最后的“if name …” 代碼前面添加:

web.webapi.internalerror = web.debugerror

并在最后的“if name …” 添加”web.reloader“:

if __name__ == "__main__": web.run(urls, globals(), web.reloader)

上面的代碼會使你在調(diào)試的階段得到更多有用的信息。web.reloader 其實(shí)是一個中間件,當(dāng)你在運(yùn)行時修改了code.py 文件后,web.reloader 會重新加載code.py 文件,讓你在瀏覽器上立刻可以看到變化。如何有多何變化的話,還是需要重新啟動服務(wù)器。web.py 也提供web.profiler ,可以輸出有用的信息,有關(guān)每個頁面的每個函數(shù)調(diào)用的次數(shù),這用助于你改善代碼。

4. 模板

在Python 里面編寫HTML 代碼是相當(dāng)累贅的,而在HTML 里嵌入Python 代碼則有趣得多。幸運(yùn)地,web.py 使這過程變得相當(dāng)容易。

注意:舊版本的web.py 是用Cheetah templates 模板的,你可以繼續(xù)使用,但官方已不再提供支持。

在我們的web 應(yīng)用里,添加一個新的文件夾用來組織模板文件(例如”/templates“)。然后再新建一個HTML 文件(例如:”index.html“):

<em>Hello</em>, world!

或者,你可以用web.py 的模板語言用編寫這個HTML 文件:

$def with (name)

$if name:
    I just wanted to say <em>hello</em> to $name.
$else:
    <em>Hello</em>, world!

注意上面代碼的縮進(jìn)!

正如你所見的,上面的模板看上去跟這Python 文件很相似,以def with 語句開始,但在關(guān)鍵字前需要添加”$“。

注意:在模板內(nèi)的變量,如果包含有HTML 標(biāo)記,以$ 方式引用變量的話,HTML 標(biāo)記只會以純文本的顯示出來。要想HTML 標(biāo)記產(chǎn)生效果,可以用$: 引用變量。

現(xiàn)在,回到code.py 文件,在”import web” 的下一行添加:

render = web.template.render('templates/')

這告訴web.py 在哪里可以搜索得到模板目錄。

提示:可在render 調(diào)用里添加cache = False 使得每次訪問頁面時都重載模板。

下面繼續(xù)修改code.py 文件的GET 方法:

def GET(self):
    name = 'Bob'
    print render.index(name)

上面的”index“ 是模板的名字,”name“ 是傳遞過去的參數(shù)。

修改code.py 文件的urls 變量:

urls=(
    '/(.*)', 'index')

上面的“/(.*)” 是一個正則表達(dá)式。

再將GET 方法修改如下:

def GET(self,name):
    print render.index(name)

現(xiàn)在,訪問”/“的話,會顯示”Hello, world!“;訪問”/Joe“ 的話,會顯示”I just want to say hello to Joe“。

如果你想學(xué)習(xí)更多關(guān)于web.py templates 的話,可以訪問templetor page。

5. 數(shù)據(jù)庫

注意:在你開始連接數(shù)據(jù)庫之前,請先安裝正確的數(shù)據(jù)庫驅(qū)動。例如,MySQL 使用MySALdb,Postgre 使用psycopg2。

添加以下代碼,則可以正確配置你的數(shù)據(jù)庫:

web.config.db_parameters = dict(
    dbn='postgres',
    user='username',
    pw='password',
    db='dbname'
)

現(xiàn)在,先行在數(shù)據(jù)庫里創(chuàng)建一個簡單的表:

CREATE TABLE todo (
  id serial primary key,
  title text,
  created timestamp default now(),
  done boolean default 'f'
);

初始化一行:

INSERT INTO todo (title) VALUES ('Learn web.py');

回到code.py,修改GET 方法如下:

def GET(self):
    todos = web.select('todo')
    print render.index(todos)

修改urls 變量:

urls = (
    '/', 'index')

重新編輯index.html 文件如下:

$def with (todos)
<ul>
$for todo in todos:
    <li id="t$todo.id">$todo.title</li>
</ul>

現(xiàn)在,可以訪問”/“,如果顯示”Learn web.py“,則祝賀你成功了!

現(xiàn)在,再讓我們看看如何向數(shù)據(jù)庫寫入。

在index.html 文件的尾部添加如下內(nèi)容:

<form method="post" action="add">
   <p>
       <input type="text" name="title" />
       <input type="submit" value="Add" />
   </p>
</form>

修改code.py 文件的urls 變量如下:

urls = (
    '/', 'index',
    '/add', 'add'
)

在code.py 里添加一個類:

class add:
    def POST(self):
        i = web.input()
        n = web.insert('todo', title=i.title)
        web.seeother('/')

web.input 使你能夠方便地訪問用戶通過表單提交上來的變量。web.insert 用于向數(shù)據(jù)庫的 “todo” 表插入數(shù)據(jù),并且返回新插入行的ID。web.seeother 用于重轉(zhuǎn)向到”/“。

提示:對于數(shù)據(jù)庫的操作,還有web.transact(), web.commit(), web.rollback()web.update()。

在web.py 里,還有web.input,web.query 和其它的函數(shù),返回”Storage objects”,可以像字典型類(dictionaries) 的使用。

6. 總結(jié)

web.py 的確相當(dāng)?shù)男∏桑瑧?yīng)當(dāng)歸屬于輕量級的web 框架。但這并不影響web.py 的強(qiáng)大,而且使用起來很簡單、很直接。在實(shí)際應(yīng)用上,web.py 更多的是學(xué)術(shù)上的價值,因?yàn)槟憧梢钥吹礁鄔eb 應(yīng)用的底層,這在當(dāng)今“抽象得很好”的web 框架上是學(xué)不到的 :) 如果想了解更多web.py,可以訪問web.py 的官方文檔。

這篇教程到這里也要結(jié)束了,如果你對web.py 有興趣,可以搜索更多關(guān)于web.py 的文檔看看,你一定會發(fā)現(xiàn)更酷的東西。Have fun!

參考資料

http://webpy.org/tutorial2.en

posted on 2009-12-22 11:25 老馬驛站 閱讀(954) 評論(0)  編輯 收藏 引用 所屬分類: python
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产第一区二区三区最新章节 | 午夜激情综合网| 欧美91福利在线观看| 亚洲欧美一区二区视频| 欧美搞黄网站| 亚洲人成免费| 亚洲电影专区| 久久野战av| 久久精品免费| 亚洲精品美女在线观看播放| 91久久综合| 欧美肉体xxxx裸体137大胆| 亚洲视频精品| 亚洲欧美99| 影音先锋成人资源站| 欧美国产日韩免费| 国产精品第一区| 小黄鸭精品aⅴ导航网站入口| 午夜精品久久久久| 亚洲欧美日韩国产综合精品二区| 午夜免费在线观看精品视频| 在线电影一区| 久久综合久久美利坚合众国| 亚洲激情午夜| 一区二区三区精密机械公司 | 久久人人爽爽爽人久久久| 亚洲精选久久| 午夜在线视频观看日韩17c| 亚洲欧洲av一区二区三区久久| 欧美日韩一级黄| 久久在线免费视频| 极品av少妇一区二区| 亚洲卡通欧美制服中文| 国产精品欧美一区二区三区奶水 | 亚洲天堂av图片| 国产一区在线播放| 欧美黄色网络| 日韩视频免费大全中文字幕| 欧美日韩91| 欧美aⅴ99久久黑人专区| 在线欧美电影| 午夜在线视频观看日韩17c| 久久精品国产一区二区三区| 免费在线亚洲欧美| 久久国产精品99国产精| 欧美日韩八区| 亚洲在线网站| 一区二区三区蜜桃网| 久久精品国产视频| 免费视频一区| 国内伊人久久久久久网站视频| 一区二区三区色| 久久久亚洲影院你懂的| 国产精品老女人精品视频| 最新精品在线| 欧美一区二区三区播放老司机 | 国产精品青草久久| 久久精品国产亚洲一区二区| 欧美成人小视频| 激情六月综合| 欧美日产在线观看| 久久不射2019中文字幕| 亚洲国产精品久久久久| 亚洲国产精品ⅴa在线观看| 欧美在线视频一区二区三区| 久久er精品视频| 亚洲毛片在线观看| 国产综合av| 国产精品国产三级国产普通话蜜臀 | 国产精品亚洲综合一区在线观看| 久久福利一区| 在线亚洲免费| 欧美一区在线视频| 亚洲精品乱码| 国内外成人免费激情在线视频网站 | 亚洲三级电影全部在线观看高清| 亚洲国产欧美不卡在线观看| 国产精品家教| 欧美激情一区三区| 亚洲精品久久久久久久久久久久久 | 久久人91精品久久久久久不卡| 亚洲少妇诱惑| 亚洲毛片av在线| 在线日韩av片| 国产一区二区三区久久| 久久精品道一区二区三区| 999在线观看精品免费不卡网站| 中国亚洲黄色| 亚洲精品视频在线观看网站| 经典三级久久| 狠狠综合久久av一区二区老牛| 国产精品久久久久久av下载红粉| 欧美精品久久久久久久久久| 久久亚洲欧美| 久久女同互慰一区二区三区| 亚洲欧美日韩视频一区| 亚洲视频免费观看| 日韩一级免费| 日韩视频在线观看免费| 亚洲电影视频在线| 欧美激情免费观看| 欧美成人一品| 亚洲国产成人高清精品| 欧美激情视频一区二区三区免费| 久热国产精品视频| 亚洲亚洲精品三区日韩精品在线视频| 国产精品久久久久久久7电影| 欧美日韩精品在线| 欧美午夜电影网| 欧美中文字幕在线观看| 欧美一级播放| 亚洲美女中文字幕| 99精品视频一区二区三区| 欧美一区二区三区视频免费| 午夜久久99| 久久黄金**| 美女尤物久久精品| 欧美大片在线观看| 亚洲精品在线免费观看视频| 日韩亚洲欧美成人一区| 亚洲午夜电影| 久久国产99| 免费欧美在线视频| 欧美日韩调教| 国产欧美日韩视频| 欧美日韩中文字幕综合视频| 欧美日韩三区| 国产日韩欧美综合精品| 欧美日韩国产天堂| 国产精品天天看| 在线播放精品| 日韩视频在线观看免费| 影音先锋国产精品| 亚洲毛片一区| 欧美一级日韩一级| 欧美h视频在线| 一区二区免费在线播放| 欧美一二三区在线观看| 猫咪成人在线观看| 久久久蜜桃一区二区人| 欧美一区二区三区日韩视频| 久久综合中文字幕| 欧美亚州一区二区三区| 国产一区二区三区四区五区美女 | 亚洲一区精品电影| 日韩一级大片| 欧美一二区视频| 亚洲高清视频中文字幕| 一区二区日韩精品| 久久一区激情| 国产精品视频网站| 亚洲国产美女| 欧美一区二区在线看| 亚洲国产欧美在线| 午夜精品久久久久| 欧美欧美天天天天操| 欧美激情中文字幕乱码免费| 国产精品久久久久久久电影| 亚洲国产天堂网精品网站| 亚洲综合精品一区二区| 欧美激情免费观看| 欧美在线高清| 欧美网站在线| 亚洲日本成人在线观看| 久久久噜噜噜久久| 一区二区三区日韩在线观看| 欧美成人免费全部| 欧美日韩精品系列| 亚洲激情成人在线| 久久久一区二区| 亚洲一本大道在线| 欧美日韩www| 亚洲美女91| 欧美激情精品久久久六区热门| 亚欧成人精品| 国产精品国产自产拍高清av王其| 亚洲精品一区二| 欧美福利网址| 久热国产精品| 狠狠色丁香久久婷婷综合_中| 亚洲综合久久久久| 99热这里只有精品8| 欧美精品亚洲一区二区在线播放| 亚洲高清二区| 欧美国产高潮xxxx1819| 久久久亚洲精品一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 性欧美暴力猛交69hd| 国产精品99久久久久久有的能看 | 国产精品久久看| 亚洲午夜精品网| 99re66热这里只有精品4| 欧美激情小视频| 亚洲美女在线国产| 亚洲免费不卡| 国产精品激情av在线播放| 性欧美8khd高清极品| 午夜在线a亚洲v天堂网2018| 国产亚洲欧美色| 久久综合中文色婷婷|