简体   繁体   中英

Store Tornado ( Python ) session in MongoDB

I am new to Python and MongoDB environment. I am implementing a small application in Python with Tornado + MongoDB. I want to store sessions in mongoDB.

In server.py

import os
import tornado.web 
import tornado.ioloop
import settings

application = tornado.web.Application(
  settings.urls,
  my_template_path,
  my_static_path
)
if __nam__ == '__main__':
  application.listen(8000)
  tornado.ioloop.IOLoop.instance().start()

In settings.py

import handler as H

urls = [
  (r"/",          H.ShowHome),
  (r"/login",     H.ShowLogin),
  (r"/dashboard", H.ShowDashboard)
]

In handler.py

import os
# import session or some library ????

class ShowHome(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if not self.SESSION:
       self.redirect('/login')
    else:
       self.render('index.html')

class ShowLogin(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if self.SESSION:
       self.redirect('/dashboard')
    else:
       self.render('login.html')


class ShowDashboard(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.session = True or False based on session cookie 

  def get(self):
    if not SESSION:
       self.redirect('/login')
    else:
       self.render('dashboard.html')

In handlers I want to check session, how do I do this?

Do you mean something like this?

class Base(tornado.web.RequestHandler):
    def get_unique_id(self):
        return self.get_secure_cookie('unique_id')

    def set_unique_id(self, some_value):
        return self.set_secure_cookie('unique_id', some_value)


class ShowLogin(Base):
  def get(self):
    if get_unique_id():
       # Get stuff from Mongo using unique_id
       # mongo calls
       self.redirect('/dashboard')
    else:
       self.render('login.html')


class LoginLogin(Base):
  def post(self):
    self.set_unique_id(some_id)

You probably dont want to do this though - Let Tornado handle if someone is logged in or out with the authenticated decorator

And unless you are holding a lot of data or very sensitive data it's normal (and easier) to put session data in the cookies

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM