Skip to content

Instantly share code, notes, and snippets.

@yanmhlv
Created September 2, 2013 13:44
Show Gist options
  • Save yanmhlv/6413007 to your computer and use it in GitHub Desktop.
Save yanmhlv/6413007 to your computer and use it in GitHub Desktop.
Session imitation tornado + mongo
#!/usr/bin/env python
# coding: utf-8
import mongoengine as me
from uuid import uuid4
from datetime import datetime
class Session(me.Document):
meta = {'collection': 'sessions'}
session_id = me.StringField(default = '%s' % uuid4())
user = me.ReferenceField("User")
cart = me.ReferenceField("Cart")
def __repr__(self):
return "<Session: [%s] [%s] [%s]>" % (self.session_id, self.user, self.cart)
def __str__(self):
return repr(self)
@classmethod
def get(cls, sid = None):
if sid:
session = cls.objects(session_id = sid)
if not session:
session = cls()
else:
session = cls()
return session
from tornado.web import *
from tornado.ioloop import IOLoop
class BaseHandler(RequestHandler):
SESSION_COOKIE = 'session_id'
def update_cookie(self):
sid = self.get_secure_cookie(self.SESSION_COOKIE)
self.session = Session.get(sid)
self.set_secure_cookie(self.SESSION_COOKIE, self.session.session_id)
def get_current_user(self):
self.update_cookie()
return self.session.session_id
class Handle1(BaseHandler):
@authenticated
def get(self):
self.write("Handle1")
class Handle2(BaseHandler):
def get(self):
self.write("Handle2")
class Handle3(BaseHandler):
def get(self):
self.update_cookie()
self.write("Handle3")
if __name__ == '__main__':
app = Application([
(r'/1', Handle1),
(r'/2', Handle2),
(r'/3', Handle3),
], cookie_secret = '1234', login_url = '/2')
app.listen(5000)
IOLoop.instance().start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment