__init__.py 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import os
  2. from .sessions import NullSessionInterface, RedisSessionInterface, \
  3. MemcachedSessionInterface, FileSystemSessionInterface, \
  4. MongoDBSessionInterface, SqlAlchemySessionInterface
  5. __version__ = '0.5.0'
  6. class Session(object):
  7. """This class is used to add Server-side Session to one or more Flask
  8. applications.
  9. There are two usage modes. One is initialize the instance with a very
  10. specific Flask application::
  11. app = Flask(__name__)
  12. Session(app)
  13. The second possibility is to create the object once and configure the
  14. application later::
  15. sess = Session()
  16. def create_app():
  17. app = Flask(__name__)
  18. sess.init_app(app)
  19. return app
  20. By default Flask-Session will use :class:`NullSessionInterface`, you
  21. really should configurate your app to use a different SessionInterface.
  22. .. note::
  23. You can not use ``Session`` instance directly, what ``Session`` does
  24. is just change the :attr:`~flask.Flask.session_interface` attribute on
  25. your Flask applications.
  26. """
  27. def __init__(self, app=None):
  28. self.app = app
  29. if app is not None:
  30. self.init_app(app)
  31. def init_app(self, app):
  32. """This is used to set up session for your app object.
  33. :param app: the Flask app object with proper configuration.
  34. """
  35. app.session_interface = self._get_interface(app)
  36. def _get_interface(self, app):
  37. config = app.config.copy()
  38. config.setdefault('SESSION_TYPE', 'null')
  39. config.setdefault('SESSION_PERMANENT', True)
  40. config.setdefault('SESSION_USE_SIGNER', False)
  41. config.setdefault('SESSION_KEY_PREFIX', 'session:')
  42. config.setdefault('SESSION_REDIS', None)
  43. config.setdefault('SESSION_MEMCACHED', None)
  44. config.setdefault('SESSION_FILE_DIR',
  45. os.path.join(os.getcwd(), 'flask_session'))
  46. config.setdefault('SESSION_FILE_THRESHOLD', 500)
  47. config.setdefault('SESSION_FILE_MODE', 384)
  48. config.setdefault('SESSION_MONGODB', None)
  49. config.setdefault('SESSION_MONGODB_DB', 'flask_session')
  50. config.setdefault('SESSION_MONGODB_COLLECT', 'sessions')
  51. config.setdefault('SESSION_SQLALCHEMY', None)
  52. config.setdefault('SESSION_SQLALCHEMY_TABLE', 'sessions')
  53. if config['SESSION_TYPE'] == 'redis':
  54. session_interface = RedisSessionInterface(
  55. config['SESSION_REDIS'], config['SESSION_KEY_PREFIX'],
  56. config['SESSION_USE_SIGNER'], config['SESSION_PERMANENT'])
  57. elif config['SESSION_TYPE'] == 'memcached':
  58. session_interface = MemcachedSessionInterface(
  59. config['SESSION_MEMCACHED'], config['SESSION_KEY_PREFIX'],
  60. config['SESSION_USE_SIGNER'], config['SESSION_PERMANENT'])
  61. elif config['SESSION_TYPE'] == 'filesystem':
  62. session_interface = FileSystemSessionInterface(
  63. config['SESSION_FILE_DIR'], config['SESSION_FILE_THRESHOLD'],
  64. config['SESSION_FILE_MODE'], config['SESSION_KEY_PREFIX'],
  65. config['SESSION_USE_SIGNER'], config['SESSION_PERMANENT'])
  66. elif config['SESSION_TYPE'] == 'mongodb':
  67. session_interface = MongoDBSessionInterface(
  68. config['SESSION_MONGODB'], config['SESSION_MONGODB_DB'],
  69. config['SESSION_MONGODB_COLLECT'],
  70. config['SESSION_KEY_PREFIX'], config['SESSION_USE_SIGNER'],
  71. config['SESSION_PERMANENT'])
  72. elif config['SESSION_TYPE'] == 'sqlalchemy':
  73. session_interface = SqlAlchemySessionInterface(
  74. app, config['SESSION_SQLALCHEMY'],
  75. config['SESSION_SQLALCHEMY_TABLE'],
  76. config['SESSION_KEY_PREFIX'], config['SESSION_USE_SIGNER'],
  77. config['SESSION_PERMANENT'])
  78. else:
  79. session_interface = NullSessionInterface()
  80. return session_interface