Tornado框架

Tornado介绍

Tornado 是 FriendFeed 使用的可扩展的异步非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py(豆瓣用这个写的) 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)

基本使用?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding:utf-8 -*-

  

import tornado.ioloop

import tornado.web

  

  

class MainHandler(tornado.web.RequestHandler):

    def get(self):                               #根据请求method,通过反射找到get方法;

        self.write("Hello, world")

  

application = tornado.web.Application([

    (r"/index", MainHandler),                    #一个映射对应一个类

])

  

  

if __name__ == "__main__":

    application.listen(8888)                     #socket

    tornado.ioloop.IOLoop.instance().start()

第一步:执行脚本,监听 8888 端口

第二步:浏览器客户端访问 /index  -->  http://127.0.0.1:8888/index

第三步:服务器接受请求,并交由对应的类处理该请求

第四步:类接受到请求之后,根据请求方式(post / get / delete ...)的不同调用并执行相应的方法

第五步:方法返回值的字符串内容发送浏览器

详细介绍

一、路由系统?

路由系统其实就是 url 和 类 的对应关系,这里不同于其他框架,其他很多框架均是 url 对应 函数,Tornado中每个url对应的是一个类。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#!/usr/bin/env python

# -*- coding:utf-8 -*-

  

import tornado.ioloop

import tornado.web

  

  

class MainHandler(tornado.web.RequestHandler):

    def get(self):

        self.write("Hello, world")

  

class StoryHandler(tornado.web.RequestHandler):

    def get(self, story_id):

        self.write("You requested the story " + story_id)

  

class BuyHandler(tornado.web.RequestHandler):

    def get(self):

        self.write("buy.wupeiqi.com/index")

  

application = tornado.web.Application([

    (r"/index", MainHandler),

    (r"/story/([0-9]+)", StoryHandler),

])

  

application.add_handlers(‘buy.wupeiqi.com$‘, [

    (r‘/index‘,BuyHandler),

])

  

if __name__ == "__main__":

    application.listen(80)

    tornado.ioloop.IOLoop.instance().start()

二、模板

三、实用功能

四、扩展功能

1、自定义session

2、自定义模型绑定

表单提交验证

用户输入与对象正则表达式的字段进行匹配,没错误返回True。

template/index.html


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<!DOCTYPE html>

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title></title>

    <link href="{{static_url("commons.css")}}" rel="stylesheet" />

</head>

<body>

    <h1>hello</h1>

    <form action="/index" method="post">

        <p>hostname: <input type="text" name="host" /> </p>

        <p>ip: <input type="text" name="ip" /> </p>

        <p>port: <input type="text" name="port" /> </p>

        <p>phone: <input type="text" name="phone" /> </p>

        <input type="submit" />

    </form>

</body>

</html>

index.py


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

#!/usr/bin/env python

# -*- coding:utf-8 -*-

  

import tornado.ioloop

import tornado.web

import re

  

  

class MainForm(object):

    def __init__(self):

        self.host = "(.*)"

        self.ip = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$"

        self.port = ‘(\d+)‘

        self.phone = ‘^1[3|4|5|8][0-9]\d{8}$‘

  

    def check_valid(self, request):

        form_dict = self.__dict__   #获取这个对象的所有字段

        for key, regular in form_dict.items():

            post_value = request.get_argument(key)

            #get_argument()是request方法,获取html表单中name就是key,所以这个字段名称和name最好对应

            # 让提交的数据 和 定义的正则表达式进行匹配,只能用match,从头匹配

            ret = re.match(regular, post_value)

            if not ret:

                return False

        return True

  

  

class MainHandler(tornado.web.RequestHandler):

    def get(self):

        self.render(‘index.html‘,name="test")

    def post(self, *args, **kwargs):

        obj = MainForm()

        result = obj.check_valid(self)

        print result    #全部输入正确就是True

        self.write(‘ok‘)

  

  

  

settings = {

    ‘template_path‘: ‘template‘,

    ‘static_path‘: ‘static‘,

    ‘static_url_prefix‘: ‘/static/‘,

}

  

application = tornado.web.Application([

    (r"/index", MainHandler),

], **settings)      #路由系统,应用配置settings,静态文件会去template目录里找;

  

  

if __name__ == "__main__":

    application.listen(8888)

    tornado.ioloop.IOLoop.instance().start()

来自为知笔记(Wiz)

时间: 2024-11-15 04:05:15

Tornado框架的相关文章

第二百七十一节,Tornado框架-CSRF防止跨站post请求伪造

Tornado框架-CSRF防止跨站post请求伪造 CSRF是什么 CSRF是用来在post请求时做请求验证的,防止跨站post请求伪造 当用户访问一个表单页面时,会自动在表单添加一个隐藏的input标签,name="_xsrf",value="等于一个密串" 当用户post请求提交数据时,会将_xsrf的密串提交到后台,后台会判断这个密串存在就允许提交数据,否则不允许提交 进行CSRF验证只需要两步 1.在框架配置字典里开启CSRF验证,开启后会自动接收post

tornado框架源码分析---Application类之debug参数

先贴上Application这个类的源码. class Application(httputil.HTTPServerConnectionDelegate): """A collection of request handlers that make up a web application. Instances of this class are callable and can be passed directly to HTTPServer to serve the a

第二百六十二节,Tornado框架-cookie

Tornado框架-cookie Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购物数据信息等一系列微小信息. self.set_cookie()方法,创建cookie必写参数,cookie名称和cookie值,后面有可选参数self.get_cookie()方法,获取指定cookie值,必写参数要获取的cookie名称 模板引擎 #!/usr/bin/env python #coding:utf-8 import tornado.ioloop im

第二百六十九节,Tornado框架-Session登录判断

Tornado框架-Session登录判断 Session需要结合cookie来实现 Session的理解 1.用户登录系统时,服务器端获取系统当前时间,进行nd5加密,得到加密后的密串 2.将密串作为一个字典的键,值为一个字典,也就是嵌套字典,键为密串的字典里保存用户信息 3.将这个密串当做cookie值写入浏览器 4.当用户访问时,判断值为密串的cookie是否存在,如果存在,获取cookie的值也就是密串,将这个密串在服务端的字典里查找是否存在,如果存在就可以拿到用户保存的各种信息,判断用

第二百六十七节,Tornado框架-分页封装模块

Tornado框架-分页封装模块 框架引擎 #!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web #导入tornado模块下的web文件 from controllers import index settings = { #html文件归类配置,设置一个字典 "template_path":"views", #键为template_path固定的,值为要存放HTML

第二百六十三也,Tornado框架-基于正则的动态路由映射分页

Tornado框架-基于正则的动态路由映射分页 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", index.indexHandler),正则匹配访问路径,访问录index/后面可以是可以是0个或多个数字第二步.配置逻辑处理方法,get()方法里显示对应的页面,并传值一个SHUJU全局变量列表到html模板,这个全局变量列表里是字典显示的数据第三步.在html模板里用模板语言,循环这个列表里的字典,显示到表格里第四步.设置用

tornado 框架 学习

一.概要 官网: http://www.tornadoweb.org/ 官方文档: http://www.tornadoweb.org/en/stable/index.html tornado o'reilly : http://demo.pythoner.com/itt2zh/index.html tornado 框架 学习

[转载]知乎技术方案初探——基于Python的Tornado框架

原文出处:http://nonfu.me/p/5935.html 知乎的整个网站架构图如下: 知乎技术方案 知乎是国内很少的使用Python开发的一个网站,也很多值得我们学习的地方,从知乎让我们也可以了解到一些新的WEB技术. 一.Python框架 知乎目前使用的是Tornado 框架.Tornado 全称Tornado Web Server,是一个用Python 语言写成的Web 服务器兼Web 应用框架,由 FriendFeed 公司在自己的网站FriendFeed 中使用,被faceboo

第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处理模块里的PIL(图像库),为第三方模块,需要安装 封装验证码图片生成插件py 在封装文件里先导入random(随机模块),和Pillow()图像处理模块里的所需py文件 封装验证码图片生成插件功能,调用后返回验证码图片,和字符串类型验证码,两个返回值 注意:验证码需要一个字体文件,这个字体文件必须

python tornado框架实现CRUD

1.本例采用postgresql数据库,创建数据表 user_tbl create table user_tbl(name varchar(20),signup_date date); 2.webapi接口 (1)tornado框架配置 t_tornado.py #-*- coding:UTF-8 -*- import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from t