python tornado session

main.py ,此处使用的是内存方式redis和memecahe修改driver和后面的设置

import os
from tornado import ioloop
import tornado
import tornado.httpserver
import tornado.web

app_handlers = [
    (r'/test', TestHandler),
    (r'/', IndexHandler),
]

class Application(tornado.web.Application):
    def __init__(self):
        parent_path = os.path.dirname(__file__)
        handlers = app_handlers
        settings = dict(
            debug=True,
        )
        session_settings = dict(
            driver="memory",
            driver_settings=dict(
                host=self,
            ),
            sid_name='torndsession-mem',  # default is msid.
            session_lifetime=20* 60,  # default is 1200 seconds.
            force_persistence=True,
        )
        settings.update(session=session_settings)
        tornado.web.Application.__init__(self, handlers=handlers, template_path=os.path.join(parent_path, 'template'),
                                         static_path=os.path.join(parent_path, 'static'), **settings)


if __name__ == '__main__':
    try:
        # 初始化Server
        http_server = tornado.httpserver.HTTPServer(Application())
        http_server.listen(8800)
        tornado.ioloop.IOLoop.instance().start()

    except Exception as err:
        print("error:", err)

base_request.py

# -*- coding: utf-8 -*-
from sqlalchemy.orm import scoped_session, sessionmaker
from common.dbutils import engine
from torndsession.sessionhandler import SessionBaseHandler
from common.auth_utils import token_check
# 以下导入内容此处未用到,但在pyinstaller打包的时候会用,勿删
# import torndsession.memcachedsession

__author__ = 'Ennis'


class BaseHttpHandler(SessionBaseHandler):

    def __init__(self, application, request, **kwargs):
        super(BaseHttpHandler, self).__init__(application, request, **kwargs)
        self.db = scoped_session(sessionmaker(bind=engine))
        self._session = self.session.session

    def data_received(self, chunk):
        pass

    def write(self, chunk):
        super(BaseHttpHandler, self).write(chunk)

    def on_finish(self):
        self.db.rollback()
        self.db.close()

    def session_get(self, key, default=None):
        if key in self.session:
            return self._session[key]
        else:
            return default


@token_check
class ApiRequestHandler(BaseHttpHandler):
    def __init__(self, application, request, **kwargs):
        super(ApiRequestHandler, self).__init__(application, request, **kwargs)

        if 'token' in self.session:
            self.session['token'] = self.session['token']
            self.session.flush()

    def data_received(self, chunk):
        pass

 auth_utils.py

# -*- coding: utf-8 -*-
__author__ = 'Ennis'


def token_check(handler_class):
    def wrap_execute(handler_execute):
        def require_auth(handler, kwargs):
            """
            :param handler:
            :param kwargs:
            :return:

            # I've pulled this out just for clarity, but you could stick
            # it in _execute if you wanted.  It returns True iff
            # credentials were provided.  (The end of this function might
            # be a good place to see if you like their username and
            # password.)
            """
            if 'token' not in handler.session:
                handler.set_status(401)
                handler._transforms = []
                handler.write('session expired, please login again')
                handler.finish()
                return False

            return True

        def _execute(self, transforms, *args, **kwargs):
            """
            :param self:
            :param transforms:
            :param args:
            :param kwargs:
            :return:

            # Since we're going to attach this to a RequestHandler class,
            # the first argument will wind up being a reference to an
            # instance of that class.
            """
            if not require_auth(self, kwargs):
                return False
            return handler_execute(self, transforms, *args, **kwargs)

        return _execute

    handler_class._execute = wrap_execute(handler_class._execute)
    return handler_class

api使用,登录继承base不检查session,其他接口需要检查session继承apibase


class login(BaseHttpHandler):
    def post(self):
        msg_body = self.request.body.decode()
        msg = json.loads(msg_body)
        phone = msg["phone"]
        password = hashlib.md5(msg["password"].encode(encoding='UTF-8')).hexdigest()
       
        logging.info('user login success, user_id = %s', phone + password)
        self.session['token'] = phone + password
        self.session.flush()
        self.write(json.dumps({"result": 1}))



class getUserInfo(ApiRequestHandler):
    def post(self):
        msg_body = self.request.body.decode()
        msg = json.loads(msg_body)
        phone = msg["phone"]
   
        if user == None:
            self.write(json.dumps({"result": 0, "message": "该用户信息不存在"}))
            return

redis设置方式

session_settings = dict(
            driver="redis",
            driver_settings=dict(
                host='localhost',
                port=6379,
                db=0,
                max_connections=1024,
            )
            session_lifetime=10,
            force_persistence=True,
        )

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值