本文共 6405 字,大约阅读时间需要 21 分钟。
Tornado是使用Python开发的全栈式(full-stack)Web框架和异步网络库,最早由4名Google前软件工程师(布雷特·泰勒)2007创办的Friendfeed(一个社交聚合网站)开发而来的。通过使用非阻塞IO,Tornado可以处理数以万计的开放连接,是long polling、WebSockets和其他需要为用户维护长连接应用的理想选择。
目前最新版本6.1, 我们实际项目开发是使用的不可能是最新版本,所以在此我们在tornado基础阶段所学所用的版本为6.0.
特点
django,flask和tornado对比
内置功能模块来说: django > flask > tornado使用入门门槛: django < flask < tornado
Tornado 可以被分为以下四个主要部分:
mkvirtualenv tornado_demopip install tornado==6.0.4cd ~/Desktopmkdir tdemocd tdemo
from tornado import ioloopfrom tornado import webclass Home(web.RequestHandler): def get(self): # self.write 响应数据 self.write("hello!")def make_app(): # Application是tornado web框架的核心应用类,是与服务器对应的接口,里面保存了路由映射表 # handlers 设置路由列表 return web.Application(handlers=[ (r"/", Home), ])if __name__ == "__main__": # 创建应用实例对象 app = make_app() # 设置监听的端口和地址 app.listen(8888) # ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环,等待客户端连接 ioloop.IOLoop.current().start()
from tornado import ioloopfrom tornado import webfrom tornado.options import define,options,parse_command_linedefine("port", default=8888, type=int,help="设置监听端口号,默认为8888")class Home(web.RequestHandler): def get(self): # self.write 响应数据 self.write("hello!")def make_app(): # handlers 设置路由列表 return web.Application(handlers=[ (r"/", Home), ])if __name__ == "__main__": # 解析终端启动命令,格式:python server.py --port=端口号 parse_command_line() # 创建应用实例对象 app = make_app() # 设置监听的端口和地址 app.listen(options.port) # options.port 接收参数 # ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环 ioloop.IOLoop.current().start()
开启自动加载和调试模式,开启了debug模式以后, 项目在编辑python文件的时候自动重启项目并且在出现异常时显示错误跟踪信息
from tornado import ioloop
from tornado import web from tornado import autoreload from tornado.options import define,options,parse_command_linesettings = {
‘debug’ : True, }define(“port”, default=8888, type=int,help=“设置监听端口号,默认为8888”)
class Home(web.RequestHandler): # 视图方法 def get(self): # self.write 响应数据 self.write("hello!")def make_app(): # handlers 设置路由列表 return web.Application(handlers=[ (r"/", Home), ],**settings) # 加载配置if __name__ == "__main__": # 创建应用实例对象 parse_command_line() app = make_app() # 设置监听的端口和地址 app.listen(options.port) # ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环 ioloop.IOLoop.current().start()
from tornado import ioloop
from tornado import web from tornado.options import define,options,parse_command_linesettings = {
“debug”: True, # 开启debug模式 }class Home(web.RequestHandler):
def get(self): # http请求 # 响应数据 self.write(“return self.write("hello world") # 只有在return以后,才不会被执行
urls = [ # (r"uri路径", 视图类), (r"/", Home),]if __name__ == "__main__": # 定义终端命令行参数 define(name="port",default=8888,type=int) # python 主程序.py --port=8888 define(name="host", default="127.0.0.1", type=str) # python 主程序.py --port=8888 --host=127.0.0.1 define(name="debug", default=False, type=bool) # # python 主程序.py --debug=True # 启动终端命令行参数解析方法 parse_command_line() # 创建web应用实例对象 # Application是tornado web框架的核心应用类,是与服务器对应的接口,里面保存了路由映射表 settings["debug"] = options.debug app = web.Application( urls, **settings, ) # 设置监听的端口和地址 app.listen(port=options.port,address=options.host) # ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环,等待客户端连接 ioloop.IOLoop.current().start()
在tornado中, tornado.web框架本身就默认提供了rest风格的API接口模式. 可以直接通过CBV(类视图)对外提供基本的http 视图接口.
from tornado import ioloopfrom tornado import webfrom tornado.options import define,options,parse_command_line# 项目配置settings = { "debug": True, # 开启debug模式}# 视图类必须要直接或者间接继承于 web.RequestHandlerclass Home(web.RequestHandler):def get(self): # http请求 # 响应数据 self.write("hello! oldboyEdu
") self.write("hello tornado!") # 这里也是可以被执行的 return self.write("hello world") # 只有在return以后,才不会被执行def post(self): self.write("hello!post")def put(self): self.write("hello!put")def patch(self): self.write("hello!patch")def delete(self): self.write("hello!delete")# 路由列表 urls = [ # (r"uri路径", 视图类), (r"/", Home),]if __name__ == "__main__": # 定义终端命令行参数 define(name="port",default=8888,type=int) # python 主程序.py --port=8888 define(name="host", default="127.0.0.1", type=str) # python 主程序.py --port=8888 --host=127.0.0.1 define(name="debug", default=False, type=bool) # # python 主程序.py --debug=True # 启动终端命令行参数解析方法 parse_command_line() # 创建web应用实例对象 # Application是tornado web框架的核心应用类,是与服务器对应的接口,里面保存了路由映射表 settings["debug"] = options.debug app = web.Application( urls, **settings, ) # 设置监听的端口和地址 app.listen(port=options.port,address=options.host) # ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环,等待客户端连接 ioloop.IOLoop.current().start()
from tornado import ioloopfrom tornado import web,httpserverfrom tornado import autoreloadfrom tornado.options import define,options,parse_command_linesettings = { 'debug' : False,}define("port", default=8888, type=int,help="设置监听端口号,默认为8888")class Home(web.RequestHandler): def get(self): # self.write 响应数据 self.write("hello!get") def post(self): self.write("hello!post") def put(self): self.write("hello!put") def patch(self): self.write("hello!patch") def delete(self): self.write("hello!delete")# 路由列表 urls = [ (r"/", Home), ] if __name__ == "__main__": app = web.Application(urls,**settings) # 创建应用实例对象 parse_command_line() server = httpserver.HTTPServer(app) # 设置监听的端口和地址 server.bind(options.port) server.start(0) # 0表示进程=CPU核数 # ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环 ioloop.IOLoop.current().start()
转载地址:http://bwhzi.baihongyu.com/