3

1.Tornado简介

tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。

tornado的安装也很简单,直接使用pip安装即可:pip install tornado

2.Tornado路由映射

我们已经知道了Tornado是什么了,现在让我们看看它能做什么吧。我们首先从使用Tornado编写一个简单的Web应用开始。

Tornado是一个编写对HTTP请求响应的框架。作为程序员,你的工作是编写响应特定条件HTTP请求的响应的handler。下面是一个全功能的Tornado应用的基础示例:
新建一个python file 命名为start1 往文件里加入一下代码

start1.py




import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("hello ")

application = tornado.web.Application([
    (r"/",MainHandler),
])

if __name__ == "__main__":
    application.listen(8000) #在这里需要设置端口转发,把主机的8000端口转发到虚拟机的8000端口
    tornado.ioloop.IOLoop.instance().start()


点击tool--> start SSH session
在pycharm 下方的terminal中输入以下命令执行这个py文件


workon py3env
cd tornado_1
ls
python start1.py

图片描述


然后在浏览器地址栏中键入相应的ip地址与路由
*注意地址栏内填入ip地址(就是ubuntu里面ifconfig显示的那个地址)再在后面加上':'再加上端口号
如:你的ip为 192.43.22.132 端口为9000
那么地址栏就该这么填 192.43.22.132:9000*


图片描述


这是一个简单,基础的示例,接下来看一个更加复杂一点的示例。

start2.py


import tornado.httpserver  #帮助启动tornado服务器
import tornado.ioloop      #开启tornado循环,后台等待
import tornado.options       #命令行中读取设置
import tornado.web         #RequestHandler 和 Application 在这个模块里面

from tornado.options import define, options   #define用来定义默认端口号

# 定义一个默认端口
define("port", default=9000, help="run on the given port", type=int)


# 定义一个事件处理的类
class IndexHandler(tornado.web.RequestHandler):
    def get(self):  # 这是get方法
        self.write('abc')  # 往页面中写入字符串abc  


if __name__ == "__main__":
    tornado.options.parse_command_line()

    app = tornado.web.Application(  
        handlers=[  
        (r"/", IndexHandler),  # 路由映射 当访问路由/的时候 调用IndexHandler类来处理
        ]
    )
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)  # 监听这个端口
    tornado.ioloop.IOLoop.instance().start()  # 启动这个服务

关掉上执行中的start1.py (Ctrl + C
将这个新建的文件更新到ubuntu中
再执行start2.py文件
然后在浏览器地址栏中输入ip:9000 (我们刚才换了一下port的值)
显示如下


![clipboard.png](/img/bV6cJc)


在端口后面加上不同的路径,可以通过路由映射来做不同的事情。

在start2.py中添加以下代码


#添加路由映射
(r"/aaa", AaaHandler),

#写对应的类
class AaaHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('aaa')
    
#有了不同的映射之后就可以实现各种需求


图片描述

在上面的代码中,self.write()就是输出,可以把内容输出到浏览器。
注意 write输出的内容 是python对象序列化的对象 即json对象

3.Tornado的项目结构的输入与输出

在上面的代码中,self.write()就是输出,可以把内容输出到浏览器。

但是如果想得到输入,可以使用查询字符串。
在start2.py中加入一下代码

#添加路由映射
(r"/gre", GreHandler),

#添加处理类
class GreHandler(tornado.web.RequestHandler):
    def get(self):
        gre = self.get_argument('aaa','hello') #得到网页上aaa的值 默认为hello
        self.write(gre + ',frindely user!')

这里的get_argument可以得到浏览器地址栏中的参数输入。

默认的情况


图片描述

有参数的情况

参数改为123
参数输入的格式为路由后+?+变量赋值


图片描述

使用get_arguments来获取查询字符串列表。

注意:write不能序列化一个列表,但是字典是可以的。


lethe
44 声望7 粉丝