返回顶部
首页 > 资讯 > 前端开发 > html >如何理解Tornado web框架
  • 130
分享到

如何理解Tornado web框架

2024-04-02 19:04:59 130人浏览 薄情痞子
摘要

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

这篇文章主要讲解了“如何理解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',              # 设置静态模板路径,设置完可以把CSSjsJquery等静态文件放置static文件夹中
    'static_url_prefix': '/sss/',        #导入时候需要加上/sss/,例如<script 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框架这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何理解Tornado web框架

本文链接: https://lsjlt.com/news/84765.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解Tornado web框架
    这篇文章主要讲解了“如何理解Tornado web框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Tornado web框架”吧!tornado简...
    99+
    2024-04-02
  • Python Web框架Tornado
    Python Web框架Tornado的异步处理代码示例Tornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,...
    99+
    2023-01-31
    框架 Python Web
  • Python Web框架Tornado运行和部署
    本文实例为大家分享了Python Web框架Tornado运行和部署的详细内容,供大家参考,具体内容如下 一、运行和部署 因为Tornado内置了自己的HTTPServer,运行和部署它与其他Python ...
    99+
    2022-06-04
    框架 Python Web
  • Python常用Web框架Django、Flask与Tornado介绍
    web框架是什么 web开发框架是一组工具,同时也提供了非常多的资源,供软件开发人员构建和管理网站、提供web服务、编写web应用程序。它是一个抽象工具,能使开发应用程序和重复使用代...
    99+
    2024-04-02
  • 如何理解ASP.NET Web开发框架项目
    本篇文章为大家展示了如何理解ASP.NET Web开发框架项目,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。项目名称:Enterprise Solution技术参数1 C# ASP.NET Web ...
    99+
    2023-06-17
  • Python Tornado框架轻松写一个Web应用的全过程
    目录Tornado是什么 安装 试试看使用tornado框架来写一个web application 总结Tornado是什么 学委之前在看Jupyter组件的源码的时候,发现了to...
    99+
    2024-04-02
  • 如何理解Web前端框架与类库的思考
    本篇文章为大家展示了如何理解Web前端框架与类库的思考,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉。网站技术是为业务...
    99+
    2024-04-02
  • 使用Python的Tornado框架实现一个Web端图书展示页面
    首先,为什么选择Tornado: 1.高性能的网络库,这可以和gevent,twisted,libevent等做对。 提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclien...
    99+
    2022-06-04
    框架 页面 图书
  • web框架原理,http 协议
    目录 web框架原理 web框架是什么东西 执行代码用浏览器访问一下 输出结果 http 协议 ...
    99+
    2023-01-31
    框架 原理 协议
  • 如何理解Java ORM框架guzz
    本篇文章给大家分享的是有关如何理解Java ORM框架guzz,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。guzz 1.3.1 大版本更新噢: 动态拼接SQL终于...
    99+
    2023-06-17
  • 如何搭建合适的Web框架
    如何搭建合适的Web框架,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前在Web开发框架推导一文中我们一步步的搭建了一个开发框架。在当时的情况下,还算满足需求。但是随着项...
    99+
    2023-06-16
  • 如何理解HTML5内联框架iFrame
    本篇文章为大家展示了如何理解HTML5内联框架iFrame,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。由于现在frame和frameset很少使用,已经过时了,已...
    99+
    2024-04-02
  • 如何理解spring框架中的ioc
    这期内容当中小编将会给大家带来有关如何理解spring框架中的ioc,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。摘要: 关于spring框架中的ioc的幽默解释 IoC就是Inversion of Co...
    99+
    2023-06-17
  • C++框架该如何正确理解
    本篇文章为大家展示了C++框架该如何正确理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言中,有很多比较重要的内容值得我们去深入研究。这些基础内容的理解不但能帮助我们掌握C++,而且还...
    99+
    2023-06-17
  • Web微框架Flask如何安装使用
    这篇文章主要为大家展示了“Web微框架Flask如何安装使用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Web微框架Flask如何安装使用”这篇文章吧。前言:Flask 是一个 Python ...
    99+
    2023-06-21
  • 深入解析Python的Tornado框架中内置的模板引擎
    template中的_parse方法是模板文法的解析器,而这个文件中一坨一坨的各种node以及block,就是解析结果的承载者,也就是说在经过parse处理过后,我们输入的tornado的html模板就变成...
    99+
    2022-06-04
    框架 模板 引擎
  • 如何理解ajax完整功能框架
    本篇内容主要讲解“如何理解ajax完整功能框架”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解ajax完整功能框架”吧!记得有篇文章数落AJAX的&quo...
    99+
    2024-04-02
  • 如何理解.NET可逆框架设计
    本篇文章为大家展示了如何理解.NET可逆框架设计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前段时间一直在学习和研究.NET事务处理,慢慢的我发现可以使用事务处理来实现一种可逆的系统框架。这种框架...
    99+
    2023-06-17
  • 如何理解持久化框架DataNucleus 3.0.8
    如何理解持久化框架DataNucleus 3.0.8,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。DataNucleus Access Platform 是一个兼容各种标准...
    99+
    2023-06-17
  • 如何使用HTML5框架加速Web开发
    本篇内容介绍了“如何使用HTML5框架加速Web开发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   ...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作