这篇文章主要讲解了“如何理解Tornado web框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Tornado web框架”吧!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仿真器。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 循环1、安装tornado12pip install tornado
源码安装:https:
/
/
pypi.python.org
/
packages
/
source
/
t
/
tornado
/
tornado
-
4.3
.tar.gz
2、先写一个入门级的代码吧,相信大家都能看懂,声明:tornado内部已经帮我们实现socket。123456789101112131415161718#!/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 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对应的是一个类。123456789101112131415161718192021222324252627282930313233343536#!/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(
""
)
class
RegisterHandler(tornado.web.RequestHandler):
def
get(
self
,
*
args,
*
*
kwargs):
self
.write(
""
)
application
=
tornado.web.Application([
(r
'/index/(?P
,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服务端demo前端HTML文件注:两个文件必须放在同一个文件夹下,中间前端代码中有用到XSS攻击和模板语言,这两个知识点下面会详细解释Tornao中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用{%
和%}
包起来的 例如{% if len(items) > 2 %}
。表达语句是使用{{
和}}
包起来的,例如{{ items[0] }}
。控制语句和对应的 Python 语句的格式基本完全相同。我们支持if
、for
、while
和try
,这些语句逻辑结束的位置需要用{% end %}
做标记。还通过extends
和block
语句实现了模板继承。这些在template
模块的代码文档中有着详细的描述。注:在使用模板前需要在setting中设置模板路径:”template_path” : “views”文件目录结构如下:1、模板语言基本使用for循环,if..else使用,自定义UIMethod以UIModulestart.pyuimoduleuimethodindex.html2、母板继承(1)、相当于python的字符串格式化一样,先定义一个占位符layout.html(2)、再子板中相应的位置继承模板的格式index.html3、导入内容content.htmlindex.html当你制作一个实际应用时,你会需要用到 Tornado 模板的所有功能,尤其是 模板继承功能。所有这些功能都可以在template
模块的代码文档中了解到。(其中一些功能是在web
模块中实现的,例如UIModules
)Cookie,有时也用其复数形式
Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109和2965都已废弃,最新取代的规范是RFC6265。(可以叫做浏览器缓存)1、cookie的基本操作2、加密cookie(签名)Cookie 很容易被恶意的客户端伪造。加入你想在 cookie 中保存当前登陆用户的 id 之类的信息,你需要对 cookie 作签名以防止伪造。Tornado 通过 set_secure_cookie 和 get_secure_cookie 方法直接支持了这种功能。 要使用这些方法,你需要在创建应用时提供一个密钥,名字为 cookie_secret。 你可以把它作为一个关键词参数传入应用的设置中:签名Cookie的本质是:用cookie做简单的自定义用户验证,下面会写一个绝对牛逼的自定义session用户验证自定义验证登录3、JavaScript操作Cookie由于Cookie保存在浏览器端,所以在浏览器端也可以使用JavaScript来操作Cookie。注:jQuery中也有指定的插件 jQuery Cookie 专门用于操作cookie,
猛击这里4、自定义session本来这想新开一个帖子,但是还是把代码贴在这吧,有用到session验证的时候直接复制拿走就好自定义sessionXSS跨站脚本攻击(Cross Site Scripting),为不和
层叠样式表(Cascading Style Sheets,
CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。tornado中已经为我们给屏蔽了XSS,但是当我们后端向前端写前端代码的时候传入浏览器是字符串,而不是形成代码格式。所以就需要一个反解,在传入模板语言中前面加一个raw,例如{{ raw zhangyanlin }},这样通俗的讲可能不太懂,写一段代码,可能就懂了start.pyindex.htmlCSRFCSRF(Cross-site
requestforgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
当前防范 XSRF 的一种通用的方法,是对每一个用户都记录一个无法预知的 cookie 数据,然后要求所有提交的请求中都必须带有这个 cookie 数据。如果此数据不匹配 ,那么这个请求就可能是被伪造的。Tornado 有内建的 XSRF 的防范机制,要使用此机制,你需要在应用配置中加上 xsrf_cookies 设定:xsrf_cookies=True,再来写一段代码,来表示一下:start.pycsrf.html简单来说就是在form验证里面生成了一段类似于自己的身份证号一样,携带着他来访问网页上传文件这块可以分为/p>
小编给大家分享一下html中框架的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 框架是什么?框架就是在一个窗口可以显示多个页面内容的一个容器。框架又分为垂直和水平框架。 不…