tornado 小而精 Django 大而全
Web框架 Tornado是一个由Python开发的Web框架
Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务
非阻塞 Tornado是单线程异步的非阻塞服务器,因此速度非常快,相对一般情况下来说,如果同时连接数Django为3000个左右,那么Tornado为10000个
易于学习 Tornado的学习成本非常低,是个非常容易学习使用的Web框架
Tornado的安装
pip install tornado
import tornado.ioloop #基于epoll的循环.
import tornado.web #web框架的核心模块
import tornado.httpserver
from tornado.options import define,options
define('port',default = 8080,help = 'run port', type = int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('hello this is my first WebWerver')
class IndexHandler():
application = tornado.web.Application(
[
(r'/',MainHandler), #数据以元组存放.
('/index',IndexHandler)
#用来存放路径的
]
) #基于核心模块下面的类的实例化,是服务器进行调用的接口.web框架的应用核心.
if __name__ = '__main__':
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port) #绑定操作
tornado.ioloop.IOloop.current().start() #,询问epoll的一个循环.开启服务器.访问不同路径,返回不同的资源.
路由
get_arguments() ?key=value
简单的例子
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler): #继承底层封装内容.
def get(self):
self.write("hello,this is my first webserver")
application = tornado.web.Application([ #应用的核心
(r"/",MainHandler), #定义路径及Handler
])
if __name__ == "__main__":
application.listen(8080)
tornado.ioloop.IOLoop.current().start()
tornado.ioloop #开启循环,让服务一直等待请求的到来
tornado.web #web框架核心模块,服务基本功能都封装在此模块中
路由表
application = tornado.web.Application([
(r"/",MainHandler),
])
客户端访问服务器可以看成是:客户端读取服务器资源的一个过程,路由表就指定了具体访问什么资源
在 Tornado 中,路由表通过如上方式定义
路由表是访问服务器的入口,在工作中如果有新的需求,往往只需要在路由表中添加新的路由即可
Handler
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("hello ")
在这里指定请求的资源 ,
启动Tornado
导入
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
Handler
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write('hello')
路由
if __name__ == '__main__':
tornado.options.parse_command_line() #打印请求信息.
app = tornado.web.Application(
handlers=[
(r'/',IndexHandler),
]
)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
命令行交互 使用命令行来控制启动
Tornado 支持通过命令行参数来控制 Tornado 的启动形式
代码
define('port', default=8080, help='run port', type=int)
define('version', default='0.0.1', help='version 0.0.1', type=str)
#通过这个来设置动态指定端口.
在命令行中输入:python tor.py --port=8888
使用
python test.py --port=8000
python test.py --version=1.0
python test.py --help
输入和输出
输入:
class TestIndexHandler(tornado.web.RequestHandler):
def get(self):
name = self.get_argument('name', 'no') #指定key,value
self.write('hello '+name)
print(name)
name = self.get_arguments('name')
self.write(' ')
self.write(','.join(name))
print(name)
使用:http://127.0.0.1:8000/test?name=budong #key=value&key=value形式.
? 后面便是参数
可以通过: get_argument 和 get_arguments 来获取参数值
输出:
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write('abc')
从 Tornado 输出到浏览器我们可以使用 write