• tornado 自定义session (一)


    tornado 中没有session功能,需要我们自己实现。

    目录:

    settings:

    settings = {
        'template_path': 'templates',
        'static': 'static'
    }
    

    home:

    #!/usr/bin/env python
    # Version = 3.5.2
    # __auth__ = '无名小妖'
    import tornado.web
    import hashlib
    import time
    
    container = {}
    
    
    def md5():
        m = hashlib.md5()
        m.update(bytes(str(time.time()), encoding='utf8'))
        return m.hexdigest()
    
    
    class Session:
    
        def __init__(self, handler):
            random_str = handler.get_cookie('__session_id__')
            if random_str:
                if random_str in container:
                    self.r_str = random_str
                else:
                    random_str = md5()
                    container[random_str] = {}
                    self.r_str = random_str
            else:
                random_str = md5()
                container[random_str] = {}
                self.r_str = random_str
            handler.set_cookie('__session_id__', random_str, expires=time.time()+200)
    
        def set_session(self, key, value):
            ret = container[self.r_str][key] = value
            return ret
    
        def get_session(self, key):
            ret = container[self.r_str].get(key, None)
            return ret
    
    
    class BaseHandler(tornado.web.RequestHandler):
        def initialize(self):
            self.session_info = Session(self)
    
    
    class MainHandler(BaseHandler):
        def get(self):
            # self.write("Hello, world")
            self.render('index.html')
    
        def post(self, *args, **kwargs):
            user = self.get_argument('user')
            pwd = self.get_argument('pwd')
            if user == 'xiao' and pwd == '123':
                self.session_info.set_session('is_login', True)
                self.session_info.set_session('user', user)
                self.redirect('/main')
            else:
                self.redirect('/index')
    
    
    class IndexHandler(BaseHandler):
        def get(self):
            current_user = self.session_info.get_session('user')
            if current_user:
                self.write(current_user)
            else:
                self.write('未登录')
    

      注:自己写个session类,再重写initialize方法。

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/index" method="post">
            <input type="text" name="user">
            <input type="text" name="pwd">
            <input type="submit" value="提交">
        </form>
    </body>
    </html>
    

    app:

    from tornado import ioloop
    import tornado.web
    from controler.home import MainHandler, IndexHandler
    from commons.settings import settings
    
    
    application = tornado.web.Application([
        (r"/index", MainHandler),  # url--对应类,django对应的是函数
        (r"/main", IndexHandler),  # url--对应类,django对应的是函数
    ],
        **settings  # 加载配置
    )
    
    
    if __name__ == "__main__":
        application.listen(8888)
        ioloop.IOLoop.instance().start()
    

      

    效果:

    未登录时,访问main:

    登录:

    登陆后:

    证明已登录。

  • 相关阅读:
    第3关:求三位数各位数字的和
    第4关:求三角形的面积
    第6关:输出杨辉三角
    最短路 模板 【bellman-ford,dijkstra,floyd-warshall】
    hdu 1874 畅通工程 【spfa and dijkstra实现】
    01背包问题 总结关于为什么01背包优化成1维数组后,内层循环是逆序的?
    Stein算法求最大公约数
    hdu 1576 A/B 【扩展欧几里德】
    树状数组之 ——区间更新,单点查询;区间更新,区间查询;
    差分数组
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/6737541.html
Copyright © 2020-2023  润新知