使用web.py的時候,web.input()和web.data() 均可以接收用戶從瀏覽器端輸入的參數。python
web.input()方法返回一個包含從url(GET方法)或http header(POST方法,即表單POST)獲取的變量的web.storage對象(相似字典).舉個例子,若是你訪問頁面http://example.com/test?id=10,在Python後臺你想取得 id=10 ,那麼經過web.input()那就是小菜一碟:web
class SomePage: def GET(self): user_data = web.input() return "<h1>" + user_data.id + "</h1>"
web.data()獲取的是http請求包中的實體正文,函數返回值類型是字符串。因爲GET請求包中沒有實體正文,因此GET請求包是不能使用web.data()函數的,只有POST請求包才能夠使用web.data()函數,返回的是一個字符串。舉個例子,經過一個form提交了一個username和password,web.date接收到的數據是這樣的。瀏覽器
class RequestHandler(): def POST(): data = web.data() # 經過這個方法能夠取到數據 print data >>'username=jay&password=123456'
特殊字符的處理:函數
當用戶輸入了test@test.com,使用web.input 接收到的就是test@test.com,而使用web.data接收到的就是test%40test.com,若是混用這兩種方式,並且不作額外的編碼和解碼,就會出現信息不一致的狀況。編碼
我作項目的時候,註冊的時候接收用戶的輸入,使用web.input 接收用戶的輸入,登錄的時候使用web.data接收用戶的輸入。結果是:只要用戶的密碼中包含了特殊字符,就會出現沒法登錄的狀況。url
解決方案是:將註冊環節接收用戶輸入的方式也改成web.data,一方面註冊和登錄的接收方式一致了,一方面因爲web.data方式會對特殊字符進行轉碼,避免了大部分潛在的問題!orm
補充:web.input http://webpy.org/cookbook/input.zh-cn
web.data 對象