我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解Tornado web框架

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解Tornado web框架

这篇文章主要讲解了“如何理解Tornado web框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Tornado web框架”吧!

tornado简介

1、tornado概述

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

Tornado代表嵌入实时应用中最新一代的开发和执行环境。 Tornado 包含三个完整的部分:

     (1)、Tornado系列工具, 一套位于主机或目标机上强大的交互式开发工具和使用程序;

     (2)、VxWorks 系统, 目标板上高性能可扩展的实时操作系统;

     (3)、可选用的连接主机和目标机的通讯软件包 如以太网、串行线、在线仿真器或ROM仿真器。

在学习web前端的过程中,难免会遇到很多的问题,这些问题可能会困扰你许久,为此我有个web开发学习交流群( 545667817 ),里面都是ITPUB的小伙伴,大家互相学习互相交流共同进步,每日分享不同的学习资料!

2、tornado特点

Tornado的独特之处在于其所有开发工具能够使用在应用开发的任意阶段以及任何档次的硬件资源上。而且,完整集的Tornado工具可以使开发人员完全不用考虑与目标连接的策略或目标存储区大小。Tornado 结构的专门设计为开发人员和第三方工具厂商提供了一个开放环境。已有部分应用程序接口可以利用并附带参考书目,内容从开发环境接口到连接实现。Tornado包括强大的开发和调试工具,尤其适用于面对大量问题的嵌入式开发人员。这些工具包括C和C++源码级别的调试器,目标和工具管理,系统目标跟踪,内存使用分析和自动配置. 另外,所有工具能很方便地同时运行,很容易增加和交互式开发。

3、tornado模块索引

最重要的一个模块是web, 它就是包含了 Tornado 的大部分主要功能的 Web 框架。其它的模块都是工具性质的, 以便让 web 模块更加有用 后面的  Tornado 攻略 详细讲解了 web 模块的使用方法。

主要模块

  • web - FriendFeed 使用的基础 Web 框架,包含了 Tornado 的大多数重要的功能

  • escape - XHTML, JSON, URL 的编码/解码方法

  • database - 对 MySQLdb 的简单封装,使其更容易使用

  • template - 基于 Python 的 web 模板系统

  • httpclient - 非阻塞式 HTTP 客户端,它被设计用来和 web 及 httpserver 协同工作

  • auth - 第三方认证的实现(包括 Google OpenID/OAuth、Facebook Platform、Yahoo BBAuth、FriendFeed OpenID/OAuth、Twitter OAuth)

  • locale - 针对本地化和翻译的支持

  • options - 命令行和配置文件解析工具,针对服务器环境做了优化

底层模块

  • httpserver - 服务于 web 模块的一个非常简单的 HTTP 服务器的实现

  • iostream - 对非阻塞式的 socket 的简单封装,以方便常用读写操作

  • ioloop - 核心的 I/O 循环

tornado框架使用

1、安装tornado

1

2

pip install tornado

源码安装:https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz

2、先写一个入门级的代码吧,相信大家都能看懂,声明:tornado内部已经帮我们实现socket。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#!/usr/bin/env python

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

 

import tornado.web

import tornado.ioloop

 

class IndexHandler(tornado.web.RequestHandler):

 

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

        self.write("Hello World, My name is 张岩林")

 

application = tornado.web.Application([

    (r'/index',IndexHandler),

])

 

if __name__ == "__main__":

    application.listen(8080)

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

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

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

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

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

第五步:然后将类的方法返回给浏览器

tornado路由系统

在tornado web框架中,路由表中的任意一项是一个元组,每个元组包含pattern(模式)和handler(处理器)。当httpserver接收到一个http请求,server从接收到的请求中解析出url path(http协议start line中),然后顺序遍历路由表,如果发现url path可以匹配某个pattern,则将此http request交给web应用中对应的handler去处理。

由于有了url路由机制,web应用开发者不必和复杂的http server层代码打交道,只需要写好web应用层的逻辑(handler)即可。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

32

33

34

35

36

#!/usr/bin/env python

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

__auth__ = "zhangyanlin"

 

import tornado.web

import tornado.ioloop

 

class IndexHandler(tornado.web.RequestHandler):

 

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

        self.write("Hello World, My name is 张岩林")

 

class LoginHandler(tornado.web.RequestHandler):

 

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

        self.write("<input type = 'text'>")

 

class RegisterHandler(tornado.web.RequestHandler):

 

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

        self.write("<input type = 'password'>")

 

application = tornado.web.Application([

    (r'/index/(?P<page>\d*)',IndexHandler),  # 基础正则路由

    (r'/login',LoginHandler),

    (r'/register',RegisterHandler),

])

 

# 二级路由映射

application.add_handlers('buy.zhangyanlin.com$',[

    (r'/login', LoginHandler),

])

 

if __name__ == "__main__":

    application.listen(8080)

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

观察所有的网页的内容,下面都有分页,当点击下一页后面的数字也就跟着变了,这种就可以用基础正则路由来做,下面我来给大家下一个网页分页的案例吧

如何理解Tornado web框架 tornado服务端demo

如何理解Tornado web框架 前端HTML文件

注:两个文件必须放在同一个文件夹下,中间前端代码中有用到XSS攻击和模板语言,这两个知识点下面会详细解释

tornado 模板引擎

Tornao中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。

Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的 例如 {% if len(items) > 2 %}。表达语句是使用 {{ 和 }} 包起来的,例如 {{ items[0] }}

控制语句和对应的 Python 语句的格式基本完全相同。我们支持 ifforwhile 和 try,这些语句逻辑结束的位置需要用 {% end %} 做标记。还通过 extends 和 block 语句实现了模板继承。这些在 template 模块 的代码文档中有着详细的描述。

注:在使用模板前需要在setting中设置模板路径:"template_path" : "views"

如何理解Tornado web框架

settings = {    'template_path':'views',             #设置模板路径,设置完可以把HTML文件放置views文件夹中
    'static_path':'static',              # 设置静态模板路径,设置完可以把css,JS,Jquery等静态文件放置static文件夹中
    'static_url_prefix': '/sss/',        #导入时候需要加上/sss/,例如<script class="lazy" data-src="/sss/jquery-1.9.1.min.js"></script>
    'cookie_secret': "asdasd",           #cookie生成秘钥时候需提前生成随机字符串,需要在这里进行渲染
    'xsrf_cokkies':True,                 #允许CSRF使用}
application = tornado.web.Application([
    (r'/index',IndexHandler),
],**settings)                           #需要在这里加载

如何理解Tornado web框架

文件目录结构如下:

如何理解Tornado web框架

1、模板语言基本使用for循环,if..else使用,自定义UIMethod以UIModule

如何理解Tornado web框架 start.py

如何理解Tornado web框架 uimodule

如何理解Tornado web框架 uimethod

如何理解Tornado web框架 index.html

2、母板继承

(1)、相当于python的字符串格式化一样,先定义一个占位符

如何理解Tornado web框架 layout.html

(2)、再子板中相应的位置继承模板的格式

如何理解Tornado web框架 index.html

3、导入内容

如何理解Tornado web框架 content.html

如何理解Tornado web框架 index.html

如何理解Tornado web框架

在模板中默认提供了一些函数、字段、类以供模板使用:
escape: tornado.escape.xhtml_escape 的別名
xhtml_escape: tornado.escape.xhtml_escape 的別名
url_escape: tornado.escape.url_escape 的別名
json_encode: tornado.escape.json_encode 的別名
squeeze: tornado.escape.squeeze 的別名
linkify: tornado.escape.linkify 的別名
datetime: Python 的 datetime 模组
handler: 当前的 RequestHandler 对象
request: handler.request 的別名
current_user: handler.current_user 的別名
locale: handler.locale 的別名
_: handler.locale.translate 的別名
static_url: for handler.static_url 的別名
xsrf_form_html: handler.xsrf_form_html 的別名

如何理解Tornado web框架

当你制作一个实际应用时,你会需要用到 Tornado 模板的所有功能,尤其是 模板继承功能。所有这些功能都可以在template 模块 的代码文档中了解到。(其中一些功能是在 web 模块中实现的,例如 UIModules

tornado cookie

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109和2965都已废弃,最新取代的规范是RFC6265。(可以叫做浏览器缓存)

1、cookie的基本操作

如何理解Tornado web框架

#!/usr/bin/env python# -*- coding:utf-8 -*-
   import tornado.ioloopimport tornado.web   
   
class MainHandler(tornado.web.RequestHandler):    def get(self):        print(self.cookies)              # 获取所有的cookie
        self.set_cookie('k1','v1')       # 设置cookie
        print(self.get_cookie('k1'))     # 获取指定的cookie
        self.write("Hello, world")
   
application = tornado.web.Application([
    (r"/index", MainHandler),
])   
   
if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

如何理解Tornado web框架

2、加密cookie(签名)

Cookie 很容易被恶意的客户端伪造。加入你想在 cookie 中保存当前登陆用户的 id 之类的信息,你需要对 cookie 作签名以防止伪造。Tornado 通过 set_secure_cookie 和 get_secure_cookie 方法直接支持了这种功能。 要使用这些方法,你需要在创建应用时提供一个密钥,名字为 cookie_secret。 你可以把它作为一个关键词参数传入应用的设置中:

如何理解Tornado web框架

#!/usr/bin/env python# -*- coding:utf-8 -*-
   import tornado.ioloopimport tornado.web    
class MainHandler(tornado.web.RequestHandler):    def get(self):         if not self.get_secure_cookie("mycookie"):             # 获取带签名的cookie
             self.set_secure_cookie("mycookie", "myvalue")      # 设置带签名的cookie
             self.write("Your cookie was not set yet!")         else:
             self.write("Your cookie was set!")
application = tornado.web.Application([
    (r"/index", MainHandler),
])   
if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

如何理解Tornado web框架

签名Cookie的本质是:

如何理解Tornado web框架

写cookie过程:
    将值进行base64加密
    对除值以外的内容进行签名,哈希算法(无法逆向解析)
    拼接 签名 + 加密值
读cookie过程:
    读取 签名 + 加密值
    对签名进行验证
    base64解密,获取值内容

如何理解Tornado web框架

用cookie做简单的自定义用户验证,下面会写一个绝对牛逼的自定义session用户验证

如何理解Tornado web框架 自定义验证登录

3、JavaScript操作Cookie

由于Cookie保存在浏览器端,所以在浏览器端也可以使用JavaScript来操作Cookie。

如何理解Tornado web框架

function setCookie(name,value,expires){
    var temp = [];
    var current_date = new Date();
    current_date.setSeconds(current_date.getSeconds() + 5);
    document.cookie = name + "= "+ value +";expires=" + current_date.toUTCString();
}

如何理解Tornado web框架

注:jQuery中也有指定的插件 jQuery Cookie 专门用于操作cookie, 猛击这里

 4、自定义session

本来这想新开一个帖子,但是还是把代码贴在这吧,有用到session验证的时候直接复制拿走就好

如何理解Tornado web框架 自定义session

XSS攻击和CSRF请求伪造

XSS

跨站脚本攻击(Cross Site Scripting),为不和 层叠样式表(Cascading Style Sheets,  CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。

tornado中已经为我们给屏蔽了XSS,但是当我们后端向前端写前端代码的时候传入浏览器是字符串,而不是形成代码格式。所以就需要一个反解,在传入模板语言中前面加一个raw,例如{{ raw zhangyanlin }},这样通俗的讲可能不太懂,写一段代码,可能就懂了

如何理解Tornado web框架 start.py

如何理解Tornado web框架 index.html

CSRF

CSRF(Cross-site  request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
当前防范 XSRF 的一种通用的方法,是对每一个用户都记录一个无法预知的 cookie 数据,然后要求所有提交的请求中都必须带有这个 cookie 数据。如果此数据不匹配 ,那么这个请求就可能是被伪造的。

Tornado 有内建的 XSRF 的防范机制,要使用此机制,你需要在应用配置中加上 xsrf_cookies 设定:xsrf_cookies=True,再来写一段代码,来表示一下:

如何理解Tornado web框架 start.py

如何理解Tornado web框架 csrf.html

简单来说就是在form验证里面生成了一段类似于自己的身份证号一样,携带着他来访问网页

tornado上传文件

上传文件这块可以分为两大类,第一类是通过form表单验证进行上传,还有一类就是通过ajax上传,下面就来介绍一下这两类

1、form表单上传文件

如何理解Tornado web框架 start.py

如何理解Tornado web框架 index.html

 2、ajax上传文件

如何理解Tornado web框架 HTML iframe

如何理解Tornado web框架 Jquery 上传

如何理解Tornado web框架 XML提交

如何理解Tornado web框架 start.py

注:下面所有的实例用相同的python代码都能实现,只需要改前端代码,python代码文件名为start.py

tornado 生成随机验证码

 用python生成随机验证码需要借鉴一个插件,和一个io模块,实现起来也非常容易,当然也需要借鉴session来判断验证码是否错误,下面写一段用户登录验证带验证码的,再看下效果,插件必须和执行文件必须放在更目录下

如何理解Tornado web框架 start.py

如何理解Tornado web框架 login.html

效果图如下:

如何理解Tornado web框架

感谢各位的阅读,以上就是“如何理解Tornado web框架”的内容了,经过本文的学习后,相信大家对如何理解Tornado web框架这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解Tornado web框架

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python Web框架Tornado

Python Web框架Tornado的异步处理代码示例Tornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,
2023-01-31

Python Web框架Tornado运行和部署

本文实例为大家分享了Python Web框架Tornado运行和部署的详细内容,供大家参考,具体内容如下 一、运行和部署 因为Tornado内置了自己的HTTPServer,运行和部署它与其他Python web框架不太一样。你需要写一个m
2022-06-04

如何理解ASP.NET Web开发框架项目

本篇文章为大家展示了如何理解ASP.NET Web开发框架项目,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。项目名称:Enterprise Solution技术参数1 C# ASP.NET Web
2023-06-17

使用Python的Tornado框架实现一个Web端图书展示页面

首先,为什么选择Tornado: 1.高性能的网络库,这可以和gevent,twisted,libevent等做对。 提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclie
2022-06-04

如何理解Java ORM框架guzz

本篇文章给大家分享的是有关如何理解Java ORM框架guzz,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。guzz 1.3.1 大版本更新噢: 1. 动态拼接SQL终于发布啦
2023-06-17

web框架原理,http 协议

目录 web框架原理 web框架是什么东西 执行代码用浏览器访问一下 输出结果 http 协议 http 协议简介
2023-01-31

如何搭建合适的Web框架

如何搭建合适的Web框架,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前在Web开发框架推导一文中我们一步步的搭建了一个开发框架。在当时的情况下,还算满足需求。但是随着项
2023-06-16

如何理解spring框架中的ioc

这期内容当中小编将会给大家带来有关如何理解spring框架中的ioc,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。摘要: 关于spring框架中的ioc的幽默解释 IoC就是Inversion of Co
2023-06-17

C++框架该如何正确理解

本篇文章为大家展示了C++框架该如何正确理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言中,有很多比较重要的内容值得我们去深入研究。这些基础内容的理解不但能帮助我们掌握C++,而且还
2023-06-17

Web微框架Flask如何安装使用

这篇文章主要为大家展示了“Web微框架Flask如何安装使用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Web微框架Flask如何安装使用”这篇文章吧。前言:Flask 是一个 Python
2023-06-21

深入解析Python的Tornado框架中内置的模板引擎

template中的_parse方法是模板文法的解析器,而这个文件中一坨一坨的各种node以及block,就是解析结果的承载者,也就是说在经过parse处理过后,我们输入的tornado的html模板就变成了各种block的集合。 这些bl
2022-06-04

如何理解.NET可逆框架设计

本篇文章为大家展示了如何理解.NET可逆框架设计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前段时间一直在学习和研究.NET事务处理,慢慢的我发现可以使用事务处理来实现一种可逆的系统框架。这种框架
2023-06-17

如何理解持久化框架DataNucleus 3.0.8

如何理解持久化框架DataNucleus 3.0.8,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。DataNucleus Access Platform 是一个兼容各种标准
2023-06-17

如何手工搭建ABP框架Web项目

本篇文章为大家展示了如何手工搭建ABP框架Web项目,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。ABP是 ASP.NET Boilerplate Project 的简称。ABP是基于DDD(领域驱
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录