Tornado简介

2018-06-23  本文已影响0人  Python野路子

Tornado简介:

Tornado是什么
Tornado可以做什么
Tornado优点是什么
Tornado学习如何

环境搭建:

1.虚拟机环境搭建如之前Django所讲,虚拟机中创建虚拟环境,安装对应的包,这里需要安装pip install tornado;其他和Django一样;
2.在pycharm创建工程有别于Django创建,只需要创建普通python工程即可,然后再配置远程连接,自动同步等如Django前面所讲;

Tornado代码简单例子:

import tornado.ioloop   #开启循环,让服务一直等待请求的到来
import tornado.web  #web服务基本功能都封装在此模块中

class IndexHandler(tornado.web.RequestHandler):          #在这里指定请求的资源,类似Django视图
    def get(self):
        self.write("Hello Tornado!")
application = tornado.web.Application([         #定义路由表
    (r"/",IndexHandler),    #根据路由配置,获取什么资源,类似django url配置。
])
if __name__ == "__main__": #当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
    application.listen(8000) #创建了一个http服务器示例并绑定到给定端口,用此端口监听
    tornado.ioloop.IOLoop.instance().start() #启动IOLoop实例的I/O循环,同时服务器监听被打开。一直运行

路由

在tornado web框架中,路由表中的任意一项是一个元组,每个元组包含pattern(模式)和handler(处理器)。当httpserver接收到一个http请求,server从接收到的请求中解析出url path(http协议start line中),然后顺序遍历路由表,如果发现url path可以匹配某个pattern,则将此http request交给web应用中对应的handler去处理。
由于有了url路由机制,web应用开发者不必和复杂的http server层代码打交道,只需要写好web应用层的逻辑(handler)即可。Tornado中每个url对应的是一个类。

启动Tornado

import tornado.httpserver
import tornado.ioloop
import tornado.options     #从命令行种读取设置
import tornado.web

from tornado.options import define,options

#定义端口为8080
define('port',default=8080,help='run port',type=int)
define('version', default='0.0.1', help='version 0.0.1', type=str)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('welcome to index page!')

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('please login!')


app = tornado.web.Application([
    (r'/', IndexHandler),
    (r'/login', LoginHandler),
])

if __name__ == '__main__':
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(app)

    #如果一个与define语句中同名的设置在命令行中被给出,那么它将成为全局的options的一个属性 即 options.port 相当于define的url的port
    http_server.listen(options.port) #python test2.py --port=8000 给定了8000端口,覆盖define的

    tornado.ioloop.IOLoop.instance().start()

使用 python test2.py --port=8000启动,浏览器输入url


image.png

输入输出

import tornado.httpserver
import tornado.ioloop
import tornado.options     #从命令行种读取设置
import tornado.web

from tornado.options import define,options
#定义端口为8080
define('port',default=8080,help='run port',type=int)
define('version', default='0.0.1', help='version 0.0.1', type=str)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('welcome to index page!') #输出,类似Django中return HttpResponse('test')

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('please login!')
        name = self.get_argument('name','') #获取url参数值,如果为空则给默认值,类似Django中request.GET.get("name","")
        self.write('<br/>get_argument->name:'+name)
        print(name)

        name = self.get_arguments('name') #得到参数值的列表,不能给默认值
        self.write('<br/>')
        self.write('et_argument->names:'+','.join(name)) #将列表通过,拼接返回字符串
        print(name)

app = tornado.web.Application([
    (r'/', IndexHandler),
    (r'/login', LoginHandler),
])

if __name__ == '__main__':
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(app)

    #如果一个与define语句中同名的设置在命令行中被给出,那么它将成为全局的options的一个属性 即 options.port 相当于define的url的port
    http_server.listen(options.port) #python test2.py --port=8000 给定了8000端口,覆盖define的

    tornado.ioloop.IOLoop.instance().start()

启动服务:
python test2.py --port=8000
浏览器输入

image.png

总结:

上一篇 下一篇

猜你喜欢

热点阅读