Python Tornado 请求处理器映射
我刚开始学习Tornado框架,想知道怎么设置一个规则,让下面这些请求都能由同一个处理器来处理。
- /products/list
- /products/find/123
- /products/copy/123
/products/{action}/{argument1}/{argument2}/{argument3}
class Application(tornado.web.Application): def __init__(self): handlers = [ (r"/", home.HomeHandler), (r"/products/", product.ProductHandler)] class ProductHandler(base.BaseHandler): def get(self, action, *args): self.write("Action:" + action + "<br>") for arg in args: self.write("argument:" + arg + "<br>")
1 个回答
1
你在设置网址匹配的时候,并不是只能列出一次请求处理器(RequestHandler),所以你可以选择两种方式来处理:
def __init__(self):
handlers = [
(r"/", home.HomeHandler),
(r"/products/list/([0-9]+)", product.ProductHandler)
(r"/products/find/([0-9]+)", product.ProductHandler)
(r"/products/copy/([0-9]+)", product.ProductHandler)
(r"/products/(\w+)/(\w+)/(\w+)", product.ProductHandler)]
第一种是明确列出每一个你提到的模式,比如这样:
def __init__(self):
handlers = [
(r"/", home.HomeHandler),
(r"/products/list/(.*)", product.ProductHandler)
第二种方式是说“任何以‘products’开头的网址都应该交给产品处理器来处理”,像这样:
然后你可以在产品处理器(ProductHandler)里自己解析这些变量列表。