網頁中的數據在傳遞的時候有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 即向GET函數中傳遞name = yyx and age = 26的時候得到以下的輸出
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/(.*?)','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

我想看一下得到的數據類型
return type(data)
得到的是<type 'str'>,也就是說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 etreedata = web.data()xml = etree.fromstring(data)content = xml.find(‘Content').textreturn content
得到的結果很好

新聞熱點
疑難解答
圖片精選