I don't know how anyone else handles this, but I have been setting up things like global settings in modules like this:
class GlobalSettings: @staticmethod def get_settings(db, cache: return cache.ram('globalsettings', lambda: GlobalSettings._get_settings_from_db(db), time_expire=None) @staticmethod def _get_settings_from_db(db): settings = Storage() for row in db().select(db.global_settings.ALL): settings[row.name] = row.value return settings @staticmethod def save_settings(db, cache, settings): #code to write settings to db cache.ram.clear('globalsettings') Then, assuming I store a bunch of objects into a 'core.py' module, then I create a new model called 'z_import_modules.py' that I use to initialize the modules. The name is important so that the database and tables get initialized before the modules do. In the 'z_import_modules.py' file, all I have to do is import the 'core.py' file: core = local_import('core') My method turns the whole GlobalSettings class into a static object, so that whenever I need access to the settings object from another module or any controller, all I have to do is this: settings = core.GlobalSettings.get_settings(db, cache) It pulls the settings from the cache.ram (obviously, you can use whatever method you want). It stores the settings for the life of the application, and when settings are changed, clears the ram of all settings. Hope that helps to at least answer part of you question. I have no idea if this is the "right" way to do this, but it works for me. If someone has a better way or finds a flaw in my implementation, I would love to hear it. I am new to web2py and just started working with modules last week.