第二百五十七节,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>
原文地址:https://www.cnblogs.com/adc8868/p/6850278.html