1. global keywords : Python in defining a function, a function of external variables To operate within the function, it is necessary as a function declaration inside the global
2.python referenced variables, global variables can be referenced, but must be added to modify global keyword
3.tornado Middleware
For online demographic
and login authentication
from tornado.ioloop import IOLoop from tornado.web import RequestHandler, Application class MiddleWare(object): def process_request(self, handler): pass def process_response(self, handler): pass class CheckLogin(MiddleWare): def is_login(self, handler): pwd = handler.get_argument("pwd", "") if not pwd: raise Exception("login required") # else: # # 判断用户名密码 # return def process_request(self, handler): self.is_login(handler) session_counter = 0 class Counter(MiddleWare): def process_request(self, handler): global session_counter session_counter = session_counter + 1 class MiddleHandler(RequestHandler): def initialize(self, middleware): self.middleware = middleware def prepare(self): # print(self) # self 是Echohandler的类的实例化对象 for middleware in self.middleware: middleware.process_request(self) def finish(self, chunk=None): super(MiddleHandler, self).finish(chunk) def write_error(self, status_code, **kwargs): # print(kwargs)#{'exc_info': (<class 'Exception'>, Exception('login required',), <traceback object at 0x0000020307E9CC08>)} exc_cls, exc_instance, trace = kwargs.get("exc_info") if status_code != 200: self.set_status(status_code) self.write({"msg": str(exc_instance)}) class EchoHandler(MiddleHandler): def get(self): message = self.get_argument("msg", "world") self.write("hello, %s, current online: %d" % (message, session_counter)) def get_middleware(): return (CheckLogin(), Counter()) import tornado.ioloop if __name__ == '__main__': middleware_list = get_middleware() print(middleware_list) app = Application([(r"/echo", EchoHandler, dict(middleware=middleware_list))]) app.listen(8888) tornado.ioloop.IOLoop.current().start()