本章我們學習 Tornado 的路由傳參等問題
路由
路由的匹配
Tornado的路由匹配采用的是正則匹配
一般情況下不需要多復雜的正則,正則的基本規則如下(站長之家)
舉個例子
(r'/sum/(\d+)', Sum),
該代碼指匹配 /sum/ 后跟至少一個數字且只有數字的情況
* 需要注意的是網絡上傳輸都是字符串
類 Sum編寫
class Sum(tornado.web.RequestHandler): # 數字類 def get(self, sum): # 獲取數字並返回 self.write('%s,%s' % (type(sum), sum))
我們訪問 http://localhost:8001/sum/12 時
返回正常
我們訪問 http://localhost:8001/sum/1a2 http://localhost:8001/sum/a12 http://localhost:8001/sum/12a http://localhost:8001/sum/a 時,均會報出404錯誤,證明沒有匹配到路由
同理,當我們需要匹配兩個參數時
(r'/(\w+)/stuggle/(\d+)', Stugggle),
接收時接收兩個參數即可
def get(self, st, ins):
pass
post參數
與get一樣,post請求會尋找到該視圖的 post 方法
我們給視圖 Hello 增加一個post
class Hello(tornado.web.RequestHandler): # 封裝一個類 def get(self): # get請求進入該方法 self.write('Hello') def post(self): # post請求 txt = self.get_argument('txt') self.write(txt)
self.get_argument('txt') 指獲取post傳參中 Key 為 txt 的值,路由無需改動
get參數
get獲取參數與上面的post沒有差別
我們修改get方法來進行測試
def get(self): # get請求進入該方法 arg = self.get_argument('arg') arg1 = self.get_argument('arg1') self.write('%s+%s' % (arg,arg1))
但是需要注意的是, get_argument 在獲取不到該key時會報錯,拋出400錯誤
get_argument 方法其實可以接收三個參數
get_argument(name,default=_ARG_DEFAULT,strip=True)
第一個參數就是key的值,第二個參數為如果接收不到默認的值,第三個是默認去除前后空格
一般情況下我們第二個參數傳 None
def get(self): # get請求進入該方法 arg = self.get_argument('arg', None) arg1 = self.get_argument('arg1', None) self.write('%s+%s' % (arg,arg1)) def post(self): # post請求 txt = self.get_argument('txt', None) self.write(txt)
這樣就增加了兼容性