一、使用cookie
cookie(有时也用其复数形式cookies),指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据(通常经过加密)。
在现实应用中,服务器可以利用cookie包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。
cookie最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是cookie的功能。
另一个重要应用场合是“购物车”之类的处理。
用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入cookie,以便在最后付款时提取信息。
在Tornado框架中提供了直接操纵一般cookie和安全的cookie的方法。
安全的cookie就是指存储在客户端的cookie是经过加密的,客户端只能查看到加密后的数据。
在Tornado框架中,使用一般cookie和安全cookie的常用方法的语法格式如下:
1)set_cookie('name',value):设置cookie。
2)get_cookie('name'):获取cookie。
3)set_secure_cookie('name',value):设置安全cookie值。
4)get_secure_cookie('name'):获取安全cookie值。
5)clear_cookie(’name‘):清除名为name的cookie值。
6)clear_all_cookies():清除所有cookie。
实例:
在不同页面设置与获取cookie值。
import tornado.ioloop #异步网络功能库
import tornado.web #创建Web应用程序的Web框架。
import tornado.escape #常用函数和类
#定义子类,设置cookie的值
class MainHandler(tornado.web.RequestHandler):
def get(self):
#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):
#获取普通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",MainHandler), #使用正则表达式获取参数
(r"/shcook",shcookHdl),
],cookie_secret='aaabbbccc##$$3232sdaf##fsdd')
if __name__ == '__main__':
app.listen(8080) #设置监听服务器8080端口
tornado.ioloop.IOLoop.instance().start()
分析:
首先是导入相应的模块。
然后是定义子类,设置cookie的值。
通过重写get()函数,
.set_cookie()是设置cookie;
tornado.escape.url_escape():返回给定值的 URL 编码版本。
.set_secure_cookie()是设置安全cookie值。
然后是再定义一个子类,用于获取cookie的值。
通过重写get()函数,
.get_cookie():获取cookie的值。'odn_cookie'是通过.set_cookie()设置cookie值。
.get_secure_cookie():获取安全cookie的值,与cookie是两个部分。
然后通过tornado.web.Application()配置上面自定义的两个类。
cookie_secret='aaabbbccc##$$3232sdaf##fsdd':用来给cookies签名。
最后设置端口并启动。
运行结果:
在网页地址栏中输入:http://localhost:8080/sscool
点击“查看设置的COOKIE”
而这里之所以可以点击跳转,也是因为使用了网页的<a>标签,超链接标签。
二、URL转向
所谓URL转向,是通过服务器的特殊设置,将访问当前域名的用户引导到你指定的另一个URL页面。
在Tornado框架可以实现URL转向的功能,这需要借助于如下两个方法来实现。
1)redirect(url):在业务逻辑中转向URL。
2)RedirectHandler:实现某个URL的直接转向。
语法格式:
(r'/aaa',tornado.Web.RedirectHandler,dict(url='/abc'))
实例:
实现两种URL转向功能。
import tornado.ioloop #异步网络功能库
import tornado.web #创建Web应用程序的Web框架。
#定义子类,作为转向的目标URL请求处理程序
class DistA(tornado.web.RequestHandler):
def get(self):
self.write("被转向的目标页面!")
#定义转向处理器的类
class SrcA(tornado.web.RequestHandler):
def get(self):
self.redirect('/dist')
#定义应用配置函数
app = tornado.web.Application([
(r"/dist",DistA), #使用正则表达式获取参数
(r"/src",SrcA),
(r"/rdrt",tornado.web.RedirectHandler,{'url':'/src'}),
])
if __name__ == '__main__':
app.listen(8080) #设置监听服务器8080端口
tornado.ioloop.IOLoop.instance().start()
分析:
首先是导入模块,定义一个子类DistA,用于输出页面的。
然后又定义了一个子类SrcA,在get()中使用了self.redirect('/dist'),用于跳转到http://localhost:8080/dist这个网址。
通过tornado.web.Application配置,如果在网址中输入"/dist",就执行DistA类;输入"/src",就执行SrcA类,而SrcA类中使用了.redirect('/dist')跳转,所以就无延迟的又跳转到http://localhost:8080/dist这个网址。
而输入"/rdrt",则采用了直接跳转的方式,跳转到"/src",然后又因.redirect('/dist')设置,所以又跳转到http://localhost:8080/dist这个网址。
运行结果:
在网址中输入http://localhost:8080/dist、http://localhost:8080/src或http://localhost:8080/rdrt,都会跳转到http://localhost:8080/dist这个网址页面。
如果输入其他的网址,就会提示:
因为没有设置这个网址。
三、使用静态资源文件
大多数Web应用程序都有一组对所有用户一视同仁的文件,这些文件在应用程序运行时是不会发生变化的。
这些可以是用于网址装饰的媒体文件,如图片等,用于描述如何在屏幕上绘制网页的CSS样式表、能够被浏览器下载和执行的JavaScript代码、不含动态内容的HTML页面等。
这些不发生变化的文件称为静态资源文件。
Tornado框架支持在网址页面中直接使用静态的资源文件,如图片、Javascript脚本、CSS样式等。
当需要用到静态文件资源时,需要在初始化Application类时提供“static_path”参数。
实例:
使用图片静态资源文件。
import tornado.ioloop #异步网络功能库
import tornado.web #创建Web应用程序的Web框架。
import os
BASE_DIR = os.path.dirname(__file__)
#定义子类,作为转向的目标URL请求处理程序
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("<img src='/static/aa.jpg'/>")
self.write(BASE_DIR)
#定义应用配置函数
app = tornado.web.Application([
(r"/stt",MainHandler), #使用正则表达式获取参数
],static_path='./static')
if __name__ == '__main__':
app.listen(8080) #设置监听服务器8080端口
tornado.ioloop.IOLoop.instance().start()
分析:
首先是导入相应的模块,
而BASE_DIR = os.path.dirname(__file__)这行可以显示当前项目的根目录地址。
然后就是定义一个显示页面的子类,并使用<img>标签在网页中显示一个图片。src是一个属性,对应的是文件路径。
而这里需要注意的是,当前指定的文件的相对路径中的static文件夹好像是固定的,所以需要收到创建一个。而里面的子文件夹就可以自定义了,也就是img、css、js等文件夹。
然后是在tornado.web.Application这部分的结尾,设置static_path='./static',其实也就是声明在static文件夹中,那些固定数据。
同样也需要注意的是,改成别的名字,就无法让图片正常显示,改回来就能显示,也是让我卡壳半天。
(可能是想把这个static文件夹作为固定的存放位置吧?)
最后就是一样的端口设置和启动。
运行结果:
在网页中输入网址http://localhost:8080/stt
文章评论