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的值)
显示如下
在端口后面加上不同的路径,可以通过路由映射来做不同的事情。
在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不能序列化一个列表,但是字典是可以的。