tornado ------ 路由解析
路由映射列表的配置方式与Djamgo的类似,用正则字符串进行匹配。主要有两种:固定字串路径;参数字串路径。
固定字串路径
1 handlers = [ 2 ("/", MainHandler), # 只匹配根路径 3 ("/entry", EntryHandler), # 只匹配/entry 4 ("/entry/2015", Entry2015Handler), # 值匹配/entry/2015 5 ]
参数字串路径
参数字串可以将具备一定模式的路径映射到同一个RequestHandler处理。
1 class EntryHandler(tornado.web.RequestHandler): 2 3 def get(self, slug): 4 entry = self.db.get("select * from entries where slug = %s", slug) 5 if not entry: 6 raise tornado.web.HTTPError(404) 7 self.render("entry.html", entry=entry) 8 9 10 handlers_2 = [ 11 (r"/entry/([^/]+)", EntryHandler), 12 ]
路由映射定义了将以 /entry/ 开头的URL请求映射到吧 tornado.web.RequestHandler 的子类 EntryHandler 进行处理。
如:127.0.0.1/entry/find ; 127.0.0.1/entry/2018-02-05
带默认值的参数路径
1 class EntryHandler(tornado.web.RequestHandler): 2 3 def get(self, slug=‘default'): 4 print("*"*30) 5 entry = self.db.get("select * from entries where slug = %s", slug) 6 if not entry: 7 raise tornado.web.HTTPError(404) 8 self.render("entry.html", entry=entry) 9 10 11 handlers_2 = [ 12 (r"/entry/([^/]*)", EntryHandler), 13 ]
设置slug = 'default',用*号取代了+号,这样我们就可以用“http://xx.xx.xx.xx/entry" 进行访问。
多参数路径
参数路径还允许在一个URL模式中定义多个可变参数。
1 class DetailHandler(tornado.web.RequestHandler): 2 3 def get(self, year, month, day, slug): 4 self.write("%d-%d-%d %s" % (year, month, day, slug)) # 这里%d换成%s 5 6 7 handlers_4 = [ 8 (r"/(\d{4})/(\d{2})/(\d{2})/([a-zA-Z\-0-9\.:,_]+)/?", DetailHandler)
9 ]
清澈的爱,只为中国