web.py中文教程
歡迎來(lái)到web.py 0.3的Cookbook 。提醒您注意:某些特性在之前的版本中并不可用。當(dāng)前開(kāi)發(fā)版本是0.3。1. 在編排內(nèi)容時(shí),請(qǐng)盡量使用cookbook 格式... 如:###問(wèn)題:如何訪問(wèn)
歡迎來(lái)到web.py 0.3的Cookbook 。提醒您注意:某些特性在之前的版本中并不可用。當(dāng)前開(kāi)發(fā)版本是0.3
。
1. 在編排內(nèi)容時(shí),請(qǐng)盡量使用cookbook 格式... 如:
###問(wèn)題:如何訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)?
###解法:使用如下代碼... 2. 請(qǐng)注意,網(wǎng)址中不必含有"web" 。如"/cookbook/select",而非"/cookbook/web.select"。
3.
該手冊(cè)適用于0.3版本,所以您在添加代碼時(shí),請(qǐng)確認(rèn)代碼能在新版本中工作。
? Subdomains and how to access the username (requested)
Hello World!
問(wèn)題
如何用web.py 實(shí)現(xiàn)Hello World!?
,在URL 開(kāi)頭添加代碼: 然后用redirect 類處理以'/'結(jié)尾的網(wǎng)址:
提供靜態(tài)文件 (諸如js 腳本, css樣式表和圖象文件)
問(wèn)題
如何在web.py 自帶的web server中提供靜態(tài)文件訪問(wèn)?
,在當(dāng)前應(yīng)用的目錄下,創(chuàng)建一個(gè)名為static 的目錄,把要提供訪問(wèn)的靜態(tài)文件放在里面即可。 例如
, 網(wǎng)址 http://localhost/static/logo.png 將發(fā)送 ./static/logo.png 給客戶端。
在 Apache 中可以使用 Alias 指令,在處理 web.py 之前將請(qǐng)求映射到指定的目錄。 這是一個(gè)在 Unix like 系統(tǒng)上虛擬主機(jī)配置的例子:
問(wèn)題: 如何為整個(gè)網(wǎng)站設(shè)計(jì)一個(gè)URL 控制方案 / 調(diào)度模式
解決:
web.py 的URL 控制模式是簡(jiǎn)單的、強(qiáng)大的、靈活的。在每個(gè)應(yīng)用的最頂部,你通常會(huì)看到整個(gè)URL 調(diào)度模式被定義在元組中:
這些元組的格式是: URL 路徑, 處理類 這組定義有多少可以定義多少。如果你并不知道URL 路徑和處理類之間的關(guān)系,請(qǐng)?jiān)陂喿xcookbook 之前先閱讀Hello World example,或者
快速入門(mén)。 路徑匹配
你可以利用強(qiáng)大的正則表達(dá)式去設(shè)計(jì)更靈活的URL 路徑。比如 /(test1|test2) 可以捕捉 /test1 或 /test2。要理解這里的關(guān)鍵,匹配是依據(jù)URL 路徑的。比如下面的URL:
這個(gè)URL 的路徑是 /myapp/greetings/hello。web.py 會(huì)在內(nèi)部給URL 路徑加上^ 和$ ,這樣 /tasks/
不會(huì)匹配 /tasks/addnew。URL 匹配依賴于“路徑”,所以不能這樣使用,如:
/tasks/delete?name=(. ) ,?之后部分表示是“查詢”,并不會(huì)被匹配。閱讀URL 組件的更多細(xì)節(jié),請(qǐng)?jiān)L問(wèn)web.ctx
。
捕捉參數(shù)
你可以捕捉URL 的參數(shù),然后用在處理類中:
在 list/后面的這塊會(huì)被捕捉,然后作為參數(shù)被用在GET 或POST:
,你可以根據(jù)需要定義更多參數(shù)。同時(shí)要注意URL 查詢的參數(shù)(?后面的內(nèi)容) 也可以用web.input()取得。
開(kāi)發(fā)子程序的時(shí)候注意
為了更好的控制大型web 應(yīng)用,web.py 支持子程序。在為子程序設(shè)計(jì)URL 模式的時(shí)候,記住取到的路徑(web.ctx.path)是父應(yīng)用剝離后的。比如,你在主程序定義了URL"/blog"跳轉(zhuǎn)到'blog' 子程序,那沒(méi)在你blog 子程序中所有URL 都是以"/"開(kāi)頭的,而不是"/blog"。查看web.ctx 取得更多信息。
跳轉(zhuǎn)
(seeother)與重定向(redirect) web.seeother 和 web.redirect
問(wèn)題 在處理完用戶輸入后(比方說(shuō)處理完一個(gè)表單),如何跳轉(zhuǎn)到其他頁(yè)面?
POST 方法接收到一個(gè)post 并完成處理之后,它將給瀏覽器發(fā)送一個(gè)303消息和新網(wǎng)址。接下來(lái),瀏覽器就會(huì)對(duì)這個(gè)新網(wǎng)址發(fā)出GET 請(qǐng)求,從而完成跳轉(zhuǎn)。
注意:web.seeother 和web.redirect 不支持0.3以下版本。
用web.redirect 方法似乎也能做同樣的事情,但通常來(lái)說(shuō),這并太友好。因?yàn)閣eb.redirect 發(fā)送的是301消息-這是永久重定向。因?yàn)榇蠖鄶?shù)Web 瀏覽器會(huì)緩存新的重定向,所以當(dāng)我們?cè)俅?/p> ,
執(zhí)行該操作時(shí),會(huì)自動(dòng)直接訪問(wèn)重定向的新網(wǎng)址。很多時(shí)候,這不是我們所想要的結(jié)果。所以在提交表單時(shí),盡量使用seeother 。但是在下面要提到的這種場(chǎng)合,用redirect 卻是最恰當(dāng)?shù)模何覀円呀?jīng)更改了網(wǎng)站的網(wǎng)址結(jié)構(gòu),但是仍想讓用戶書(shū)簽/收藏夾中的舊網(wǎng)址不失效。
(注:要了解seeother 和redirect 的區(qū)別,最好是看一下http 協(xié)議中不同消息碼的含義。)
使用子應(yīng)用
問(wèn)題
如何在當(dāng)前應(yīng)用中包含定義在其他文件中的某個(gè)應(yīng)用?
在blog.py 中:
當(dāng)前的主應(yīng)用code.py :
,提供XML 訪問(wèn)
問(wèn)題
如何在web.py 中提供XML 訪問(wèn)?
如果需要為第三方應(yīng)用收發(fā)數(shù)據(jù),那么提供xml 訪問(wèn)是很有必要的。
根據(jù)要訪問(wèn)的xml 文件(如response.xml) 創(chuàng)建一個(gè)XML 模板。如果XML 中有變量,就使用相應(yīng)的模板標(biāo)簽進(jìn)行替換。下面是一個(gè)例子:
為了提供這個(gè)XML ,需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的web.py 程序(如response.py) ,它要包含下面的代碼。注意:要用"web.header('Content-Type', 'text/xml')"來(lái)告知客戶端--正在發(fā)送的是一個(gè)XML 文件。
,從post 讀取原始數(shù)據(jù)
介紹
有時(shí)候,瀏覽器會(huì)通過(guò)post 發(fā)送很多數(shù)據(jù)。在webpy ,你可以這樣操作。
高級(jí)應(yīng)用
web.ctx
問(wèn)題