第二百五十七节,Tornado框架-路由映射,逻辑处理,文件归类配置
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>