Tornado
优势:微框架 高性能 异步支持
缺点:轮子少 缺少最佳实践,使用的公司少。
使用场景:构建微服务。
简单的例子:
import tornado.ioloop import tornado.web class Mainhandler(tornado.web.RequestHandler):#类名可自定义 def get(self):#get方法 self.write('hello,word')#写入返回内容 def make_app(): return tornado.web.Application([(r'/',Mainhandler),])#路径由定义的类执行 if __name__ == '__main__': app = make_app() app.listen(80) tornado.ioloop.IOLoop.current().start()
使用tornado的模板渲染功能
class Px_web(tornado.web.RequestHandler):#类名自定 def get(self):#get方法 self.render('base.html')#返回base模板 def make_app(): return tornado.web.Application( [ (r'/',Px_web), ], template_path = os.path.join(os.path.dirname(__file__),'template')#设置模板路径template_path变量固定写法 ) if __name__ == '__main__': app = make_app() app.listen(80) tornado.ioloop.PollIOLoop.current().start()
tornado变量传值
html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{message}}</h1> </body> </html>
后端写class Px_web(tornado.web.RequestHandler): def get(self):
self.render('base.html',message='hello')#在这传 def make_app(): return tornado.web.Application( [ (r'/',Px_web), ], template_path = os.path.join(os.path.dirname(__file__),'template') ) if __name__ == '__main__': app = make_app() app.listen(80) tornado.ioloop.PollIOLoop.current().start()
tornado的异步使用
# -*- coding: utf-8 -*- __author__ = 'Px' import time from tornado import gen import tornado.web import tornado.ioloop import datetime import tornado.httpserver import sys reload(sys) sys.setdefaultencoding('utf8') class sleephand(tornado.web.RequestHandler): @gen.coroutine def get(self): yield tornado.gen.sleep(3) self.write(str(datetime.datetime.now())) def make_app(): return tornado.web.Application( [(r'/',sleephand), ] ) if __name__ == '__main__': app = make_app() httpserver = tornado.httpserver.HTTPServer(app) httpserver.listen(80) tornado.ioloop.IOLoop.instance().start()