Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。
Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 tornado.web.RequestHandler 的子类上去。在其子类中定义了 get() 或 post() 方法,用以处理不同的 HTTP 请求。
重写 RequestHandler 的方法initialize
在RequestHandler中initialize是一个空方法,
重写initialize实现session
首先自己写一个基类继承,里面重写initialize方法,调用自己定义的session处理方法
session_container = {}
create_session_id = lambda: sha1('%s%s' % (os.urandom(16), time.time())).hexdigest()
class Session(object):
session_id = "session_cookie"
def __init__(self, request):
session_value = request.get_cookie(Session.session_id)
if not session_value:
# 创建随机字符串
self._id = create_session_id()
else:
# 如果有,直接将客户端的随机字符串设置为 _id
self._id = session_value
request.set_cookie(Session.session_id, self._id)
def __getitem__(self, key): #获取值
ret = None
try:
ret = session_container[self._id][key]
except Exception,e:
pass
return ret
def __setitem__(self, key, value): #设置值
# self._id
if session_container.has_key(self._id):
session_container[self._id][key] = value
else:
# key = is_login
# value = true
# {}
# {
# 随机字符串:{'is_login': "true"}
# }
session_container[self._id] = {key: value}
def __delitem__(self, key):
del session_container[self._id][key]
class BaseHandler(tornado.web.RequestHandler):
def initialize(self):
# my_session['k1']访问 __getitem__ 方法
self.my_session = Session(self) #传入对象自己到session处理函数