19.2.4、使用cookie
cookie(有时也用其复数形式cookies),指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据(通常经过加密)。在现实应用中,服务器可以利用cookie包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。cookie最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是cookie的功能。另一个重要应用场合是"购物车"之类的处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入cookie,以便在最后付款时提取信息。
在Tornado框架中提供了直接操纵一般cookie和安全的cookie的方法。安全的cookie就是指存储在客户端的cookie是经过加密的,客户端只能查看到加密后的数据。在Tornado框架中,使用一般cookie和安全cookie的常用方法的语法格式如下所示。
" set_cookie('name',value):设置cookie。
" get_cookie('name'):获取cookie值。
" set_secure_cookie ('name',value):设置安全cookie值。
" get_secure_cookie('name'):获取安全cookie值。
" clear_cookie('name'):清除名为name的cookie值。
" clear_all_cookies():清除所有cookie。
下面的实例代码演示了在不同页面设置与获取cookie值的过程。
实例19-5 在不同页面设置与获取cookie值
源码路径 daima\19\19-5
实例文件co.py的具体实现代码如下所示。
import tornado.ioloop #导入Tornado框架中的相关模块 import tornado.web #导入Tornado框架中的相关模块 import tornado.escape #导入Tornado框架中的相关模块 #定义处理类aaaa,用于设置cookie的值 class aaaa(tornado.web.RequestHandler): def get(self): #处理get请求 #URL编码处理 self.set_cookie('odn_cookie',tornado.escape. url_escape("未加密COOKIE串")) #设置普通cookie self.set_secure_cookie('scr_cookie',"加密 SCURE_COOKIE串") #设置加密cookie self.write("<a href='/shcook'>查看设置的 COOKIE</a>") #定义处理类shcookHdl,用于获取cookie的值 class shcookHdl(tornado.web.RequestHandler): def get(self): #处理get请求 #获取普通cookie odn_cookie = tornado.escape.url_unescape(self.get_cookie('odn_cookie')) #进行URL解码 scr_cookie = self.get_secure_cookie('scr_cookie').decode('utf-8') #获取加密cookie self.write("普通COOKIE:%s,<br/>安全COOKIE:%s" % (odn_cookie,scr_cookie)) app = tornado.web.Application([ (r'/sscook',aaaa), (r'/shcook',shcookHdl), ],cookie_secret='abcddddkdk##$$34323sdDsdfdsf#23') if __name__ == '__main__': app.listen(8888) #设置监听服务器8888端口 tornado.ioloop.IOLoop.instance().start() #启动服务器 |
在上述实例代码中定义了两个类,分别用于设置cookie的值和获取cookie的值。当在浏览器中输入"http://localhost:8888/sscook"时开始设置cookie,执行效果如图19-8所示。
当单击页面中的"查看设置的COOKIE"链接时,会访问"shcook",显示出刚刚设置的cookie值。执行效果如图19-9所示。
19.2.5、URL转向
所谓URL转向,是通过服务器的特殊设置,将访问当前域名的用户引导到你指定的另一个URL页面。在Tornado框架可以实现URL转向的功能,这需要借助于如下两个方法来实现
" redirect(url):在业务逻辑中转向URL。
" RedirectHandler:实现某个URL的直接转向。
使用类RedirectHandler的语法格式如下所示。
(r'/aaa', tornado.Web.RedirectHandler, dict (url='/abc'))
下面的实例代码演示了实现两种URL转向功能的过程。
实例19-6 实现两种URL转向功能
源码路径 daima\19\19-6
实例文件zh.py的具体实现代码如下所示。
import tornado.ioloop #导入Tornado框架中的相关模块 import tornado.web #导入Tornado框架中的相关模块 #定义类DistA,作为转向的目标URL请求处理程序 class DistA(tornado.web.RequestHandler): def get(self): #获取get请求 self.write("被转向的目标页面!")#显示输出一个字符串 #定义转向处理器类SrcA class SrcA(tornado.web.RequestHandler): def get(self): #获取get请求 self.redirect('/dist') #业务逻辑转向,指向一个URL app = tornado.web.Application([ (r'/dist',DistA), #指向DistA类 (r'/src',SrcA), #指向SrcA类 (r'/rdrt',tornado.web.RedirectHandler, {'url':'/src'}) #定义一个直接转向URL ]) if __name__ == '__main__': app.listen(8888) #设置监听服务器8888端口 tornado.ioloop.IOLoop.instance().start() #启动服务器 |
在上述实例代码中定义了两个类,其中类DistA作为转向的目标URL请求处理程序,类SrcA是转向处理程序。当访问指向这个业务类时,会转向'/dist'网址。最后,在类Application中定义一个直接转向,只要访问'/rdrt'就会直接转向'/src'。在执行后,如果试图访问'/rdrt'的URL,会转向'/src',再最终转向'/dist'。也就是说,无论是访问'/rdrt',还是访问'/src',最终的执行效果都如图19-10所示。
19.2.6、使用静态资源文件
大多数Web应用程序都有一组对所有用户一视同仁的文件,这些文件在应用程序运行时是不会发生变化的。这些可以是用于网站装饰的媒体文件(如图片)、用于描述如何在屏幕上绘制网页的CSS样式表、能够被浏览器下载和执行的JavaScript代码、不含动态内容的HTML页面等。这些不发生变化的文件称为静态资源文件。
Tornado框架支持在网站页面中直接使用静态的资源文件,如图片、JavaScript脚本、CSS等。当需要用到静态文件资源时,需要在初始化Application类时提供"static_path"参数。下面的实例代码演示了使用图片静态资源文件的过程。
实例19-7 使用图片静态资源文件
源码路径 daima\19\19-7
实例文件tu.py的具体实现代码如下所示。
import tornado.ioloop #导入Tornado框架中的相关模块 import tornado.web #导入Tornado框架中的相关模块 #定义类AAA,用于访问输出静态图片文件 class AAA(tornado.web.RequestHandler): def get(self): #获取get请求 self.write("<img src='/static/ttt. jpg' />") #使用一幅本地图片 app = tornado.web.Application([ (r'/stt',AAA), #参数"/stt"请求 ],static_path='./static') #调用本网站中的图片"static/ttt.jpg" if __name__ == '__main__': app.listen(8888) #设置监听服务器8888端口 tornado.ioloop.IOLoop.instance().start() #启动服务器 |
在上述实例代码中,通过参数"/stt"请求返回的HTML代码中是一个img标签,并调用本网站中的图片"static/ttt.jpg"。在初始化类Application时提供了static_path参数,以指明静态资源的目录。最终的执行效果如图19-11所示。
相关阅读:
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。