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处理函数