加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

global,tornado的write_error,tornado的中间件的写法

发布时间:2020-12-20 10:46:48 所属栏目:Python 来源:网络整理
导读:1. global关键字 :Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global 2.python中引用变量,全局变量是可以引用的,但是修改时必须加global关键字 ? 3.tornado中间件 ? 实现在线人数统计 和登陆验证功能 ? ? from

1.global关键字:Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global

2.python中引用变量,全局变量是可以引用的,但是修改时必须加global关键字

?

3.tornado中间件

?

实现在线人数统计
和登陆验证功能

?

?

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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读