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 ]

 

posted @ 2018-06-11 15:58  巴蜀秀才  阅读(256)  评论(0编辑  收藏  举报