Tornado框架-路由映射,逻辑处理,文件归类配置
Tornado框架
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,
源码安装
https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz
快速上手
Tornado框架路由映射和逻辑处理
Tornado框架逻辑处理返回指定字符串
RequestHandler方法,Tornado框架逻辑处理
self.write()方法,参数字符串,返回字符串给浏览器
self.redirect()方法,参数是路由映射里的配置路径后缀,跳转到对应的路由映射,也就是跳转页面,写在逻辑处理函数里与self.render()方法使用差不多
Application方法,Tornado框架路由映射
listen方法,Tornado框架设置路由端口
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件 #逻辑处理
class MainHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下的RequestHandler类
def get(self): #执行get接收RequestHandler对象
self.write("Hello, world") #执行RequestHandler对象下的write方法向浏览器输出Hello, world #路由映射
application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法
(r"/index", MainHandler), #判断用户请求路径后缀是否匹配字符串index,如果匹配执行MainHandler方法
]) if __name__ == "__main__":
#内部socket运行起来
application.listen(8888) #设置端口
tornado.ioloop.IOLoop.instance().start()
原理图
Tornado框架逻辑处理返回指定html文件
self.render()方法,参数html路径,将html文件读取后返回给浏览器
HTML文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>首页</li>
<li>资讯</li>
<li>关于</li>
</ul>
</body>
</html>
py文件
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件 #逻辑处理
class MainHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下的RequestHandler类
def get(self): #执行get接收RequestHandler对象
self.render("cshi.html") #self.render()方法,参数html路径,将html文件读取后返回给浏览器 #路由映射
application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法
(r"/index", MainHandler), #判断用户请求路径后缀是否匹配字符串index,如果匹配执行MainHandler方法
]) if __name__ == "__main__":
#内部socket运行起来
application.listen(8888) #设置端口
tornado.ioloop.IOLoop.instance().start()
html文件归类配置
html文件归类配置后,render方法会自动到设置的文件夹找对应的html文件
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件 #逻辑处理
class MainHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下的RequestHandler类
def get(self): #执行get接收RequestHandler对象
self.render("cshi.html") #html文件归类配置后,render方法会自动到设置的文件夹找对应的html文件 settings = { #html文件归类配置,设置一个字典
"template_path":"template", #键为template_path固定的,值为要存放HTML的文件夹名称
} #路由映射
application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法
(r"/index", MainHandler), #判断用户请求路径后缀是否匹配字符串index,如果匹配执行MainHandler方法
],**settings) #将html文件归类配置字典,写在路由映射的第二个参数里 if __name__ == "__main__":
#内部socket运行起来
application.listen(8888) #设置端口
tornado.ioloop.IOLoop.instance().start()
js和css文件归类,静态文件配置
注意js和css文件路径配置后必须在引入路径里加上配置文件夹名称
静态文件配置后,html页面引入的css和js自动到配置的文件夹里找相应的js和css文件
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件 #逻辑处理
class MainHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下的RequestHandler类
def get(self): #执行get接收RequestHandler对象
self.render("cshi.html") #html文件归类配置后,render方法会自动到设置的文件夹找对应的html文件 settings = { #html文件归类配置,设置一个字典
"template_path":"template", #键为template_path固定的,值为要存放HTML的文件夹名称
"static_path":"static", #键为static_path固定的,值为要存放js和css的文件夹名称
} #路由映射
application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法
(r"/index", MainHandler), #判断用户请求路径后缀是否匹配字符串index,如果匹配执行MainHandler方法
],**settings) #将html文件归类配置字典,写在路由映射的第二个参数里 if __name__ == "__main__":
#内部socket运行起来
application.listen(8888) #设置端口
tornado.ioloop.IOLoop.instance().start()
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--注意js和css文件路径配置后必须在引入路径里加上配置文件夹名称-->
<link rel="stylesheet" href="static/s1.css">
</head>
<body>
<ul>
<li>首页</li>
<li>资讯</li>
<li>关于</li>
</ul>
</body>
</html>
css文件
body{
color: #ee484e;
}
js和css文件归类,强制路径前缀【不推荐】
#!/usr/bin/env python
#coding:utf-8 import tornado.ioloop
import tornado.web #导入tornado模块下的web文件 #逻辑处理
class MainHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下的RequestHandler类
def get(self): #执行get接收RequestHandler对象
self.render("cshi.html") #html文件归类配置后,render方法会自动到设置的文件夹找对应的html文件 settings = { #html文件归类配置,设置一个字典
"template_path":"template", #键为template_path固定的,值为要存放HTML的文件夹名称
"static_path":"static", #键为static_path固定的,值为要存放js和css的文件夹名称
"static_url_prefix":"/qzhi/", #键为static_url_prefix固定的,值为js和css的文件的强制前缀,必须在js和css的引入路径用强制前缀,替换配置文件夹
} #路由映射
application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法
(r"/index", MainHandler), #判断用户请求路径后缀是否匹配字符串index,如果匹配执行MainHandler方法
],**settings) #将html文件归类配置字典,写在路由映射的第二个参数里 if __name__ == "__main__":
#内部socket运行起来
application.listen(8888) #设置端口
tornado.ioloop.IOLoop.instance().start()
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--必须在js和css的引入路径用强制前缀,替换配置文件夹-->
<link rel="stylesheet" href="qzhi/s1.css">
</head>
<body>
<ul>
<li>首页</li>
<li>资讯</li>
<li>关于</li>
</ul>
</body>
</html>