zoukankan      html  css  js  c++  java
  • 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:

    登录:

    登陆后:

    证明已登录。

  • 相关阅读:
    Chunky Monkey(算法)
    Confirm the Ending(算法)
    Return Largest Numbers in Arrays(算法)
    防止SQL注入总结
    mybatis中的#和$的区别 以及 防止sql注入
    拆分字符串为树形结构
    虚拟机类加载机制
    linux加载字体
    项目上线暴露出的问题
    浅析正则表达式-应用篇
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/6737541.html
Copyright © 2011-2022 走看看