正则
tornado中对于路由映射也⽀持正则提取uri,提取出来的参数会作为
RequestHandler中对应请求⽅式的成员⽅法参数。若在正则表达式中定义了名
字,则参数按名传递;若未定义名字,则参数按顺序传递。提取出来的参数会作为
对应请求⽅式的成员⽅法的参数。
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
from tornado.options import options, define
from tornado.web import RequestHandler
define("port", default=8000, type=int, help="run server on the given
port.")
class IndexHandler(RequestHandler):
def get(self):
self.write("hello itcast.")
class SubjectCityHandler(RequestHandler):
def get(self, subject, city):
self.write(("Subject: %s<br/>City: %s" % (subject, city)))
class SubjectDateHandler(RequestHandler):
def get(self, date, subject):
self.write(("Date: %s<br/>Subject: %s" % (date, subject)))
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application([
(r"/", IndexHandler),
(r"/sub-city/(.+)/([a-z]+)", SubjectCityHandler), # ⽆名⽅式
(r"/sub-date/(?P<subject>.+)/(?P<date>\d+)",
SubjectDateHandler), # 命名⽅式
])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
import tornado.web
import tornado.ioloop
import tornado.options
from tornado.web import url
from settings import params
# 定义接收参数的名称和类型,缺省值
tornado.options.define('p',default=9090,type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write("不到长城非好汉")
class ShowHandler(tornado.web.RequestHandler):
# 接收路由中的附加参数,参数个数和initialize中参数一致
def initialize(self,name,age):
self.name = name
self.age = age
# def initialize(self,**kwargs):
# self.name = kwargs.get('name')
# self.age = kwargs.get('age')
def get(self):
self.write("姓名:{}".format(self.name))
class ListHandler(tornado.web.RequestHandler):
def get(self):
self.write("路由")
class DetailHandler(tornado.web.RequestHandler):
def get(self,aid):
print(aid,type(aid))
self.write("详细信息"+aid)
def main():
# 接收命名行参数
tornado.options.parse_command_line()
# 路由的写法
app = tornado.web.Application(
[(r'/',IndexHandler),
(r'/show/',ShowHandler,{'name':'admin','age':20}),
url(r'/list/',ListHandler,name='list'),
(r'/detail/(\d+)/',DetailHandler),
],
**params
)
app.listen(tornado.options.options.p)
tornado.ioloop.IOLoop.current().start()
if __name__ == '__main__':
main()