SessionInterface
is a class used with Flask projects that is defined in
the flask.sessions
module. SessionInterface
is the basic interface
that must be implemented to replace the default session interface.
BadSignature
and
SessionMixin
are a couple of other callables within the flask.sessions
package that also have code examples.
tedivm's flask starter app is a base of Flask code and related projects such as Celery which provides a template to start your own Flask web app. The project comes baked with an admin panel, API authentication and authorization, SQLAlchemy and many other common libraries that are often used with Flask.
The project's code is provided as open source under the BSD 2-Clause "Simplified" license.
# __init__.py
import boto3
from celery import Celery
from datetime import datetime
import os
import requests
import yaml
from flask import Flask, render_template
from flask import session as current_session
from flask_mail import Mail
from flask_migrate import Migrate, MigrateCommand
from flask.sessions import SessionInterface
from flask_sqlalchemy import SQLAlchemy
from flask_user import user_logged_out
from flask_wtf.csrf import CSRFProtect
from beaker.cache import CacheManager
from beaker.util import parse_cache_config_options
from beaker.middleware import SessionMiddleware
db = SQLAlchemy()
csrf_protect = CSRFProtect()
mail = Mail()
migrate = Migrate()
def get_config():
app = Flask(__name__)
app.config.from_object('app.settings')
if 'APPLICATION_SETTINGS' in os.environ:
app.config.from_envvar(os.environ['APPLICATION_SETTINGS'])
if 'AWS_SECRETS_MANAGER_CONFIG' in os.environ:
secret_config = get_secrets(os.environ['AWS_SECRETS_MANAGER_CONFIG'])
app.config.update(secret_config)
elif 'AWS_SECRETS_MANAGER_CONFIG' in app.config:
## ... source file abbreviated to get to SessionInterface examples ...
cache = CacheManager(**parse_cache_config_options(cache_opts))
def init_session_manager(app):
session_opts = {'cache.expire': 3600}
if 'CACHE_TYPE' not in app.config or not app.config['CACHE_TYPE']:
app.config['CACHE_TYPE'] = 'file'
if app.config['CACHE_TYPE'] == 'file':
if 'CACHE_ROOT' not in app.config or not app.config['CACHE_ROOT']:
app.config['CACHE_ROOT'] = '/tmp/%s' % __name__
session_opts['session.type'] = app.config['CACHE_TYPE']
if 'CACHE_ROOT' in app.config and app.config['CACHE_ROOT']:
session_opts['session.data_dir'] = app.config['CACHE_ROOT'] + '/session'
if 'CACHE_URL' in app.config and app.config['CACHE_URL']:
session_opts['session.url'] = app.config['CACHE_URL']
session_opts['session.auto'] = app.config.get('SESSION_AUTO', True)
session_opts['session.cookie_expires'] = app.config.get('SESSION_COOKIE_EXPIRES', 86400)
session_opts['session.secret'] = app.secret_key
class BeakerSessionInterface(SessionInterface):
def open_session(self, app, request):
session = request.environ['beaker.session']
return session
def save_session(self, app, session, response):
session.save()
app.wsgi_app = SessionMiddleware(app.wsgi_app, session_opts)
app.session_interface = BeakerSessionInterface()
@user_logged_out.connect_via(app)
def clear_session(sender, user, **extra):
current_session.clear()
def init_celery_service(app):
celery.conf.update(app.config)
def init_error_handlers(app):
def show_error(status, message='An unknown error has occured.'):
return render_template('pages/errors.html', error_code=status, message=message), status
## ... source file continues with no further SessionInterface examples...