首頁  >  文章  >  後端開發  >  淺析Python的web.py框架中url的設定方法

淺析Python的web.py框架中url的設定方法

WBOY
WBOY原創
2016-08-04 08:55:511288瀏覽

網頁中的資料在傳遞的時候有GET和POST兩種方式,GET是以網址的形式傳參數,在web.py中有著很好的匹配,如果我們配置以下的urls

 urls =(
  '/','index',
  '/weixin/(.*?)','WeixinInterface'
  
  )

先不考慮/weixin/後面的東西,現在我們來寫index的類別

 class index:
  def GET(self):
    i = web.input(name = 'kevinkelin',age = 100)     
    return render.index(i.name,i.age)

隨便寫一個index.html範本文件

 $def with(name,age)
$if name:
  I just want to say <em>hello</em> to $name, he is $age years old
$else:
  <em>hello</em>,world!

當訪問http://127.0.0.1:8080/ 此時沒有傳遞name與age的值,由於我的GET函數裡定義了預設的name與age的值,所以程式會將kevinkelin與26傳遞到模板中去得到以下的輸出

I just want to say hello to kevinkelin, he is 100 years old

當訪問http://127.0.0.1:8080/?name=yyx&age=26 即傳遞name = yyx and age = 26的時候給GET函數中得到以下的輸出

I just want to say hello to yyx, he is 26 years old

 我們也可以不定義預設的的參數,也就是定義為空

i = web.input(name = None,age = None)

當訪問http://127.0.0.1:8080/ 的時候將會得到 hello,world!的輸出即模板中的else
但如果你不定義name和age將會出錯

i = web.input()

這是因為後面你將i.name與i.age分配到模板當中去,但是全局變量裡又沒有這兩個變量,所以會報錯
但有時我們會想這樣傳遞參數,不想加那個「?」這時我們得要更改urls規則

 urls =(
  '/name=(.*)&age=(.*)','index',
  '/weixin/(.*&#63;)','WeixinInterface'  
  )

重寫class index

 class index:
  def GET(self,name,age):
    return render.index(name,age)

這裡是將url的參數透過正規匹配然後傳遞到index類別中的GET的參數中
當訪問http://127.0.0.1:8080/name=yyx&age=26 時將得到

I just want to say hello to yyx, he is 26 years old

第二種方法看似簡單,但其實不好控制,要求寫的正規工作量加大了
如果我想知道到底有多少參數透過GET方式傳遞過來,我可以直接return 來看一下到底有哪些傳遞過來了
接下來來看post來的數據:
我們可以製作一個簡單的表單或直接使用fiddler來建構資料進行POST傳值 

def POST(self):
    data = web.data()    
    return data

2016711194530065.png (698×539)

我想看得到的資料型別

return type(data)

得到的是,也就是說web.py已經將post的資料轉換成了str型別
那我來試試看傳遞xml

 <xml>
<ToUserName>yanxingyang</ToUserName>
<FromUserName>study_python</FromUserName>
<CreateTime>123456</CreateTime>
<MsgType>text</MsgType>
<Content>Just a test</Content>
</xml>

其實這個微信的XML格式做了一些更改,我來試著用lxml對它進行解析

from lxml import etree
data = web.data()
xml = etree.fromstring(data)
content = xml.find(‘Content').text
return content

得到的結果很好

2016711194622132.png (244×124)

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn