ConfigurationModels can be managed using the admin site. They are append-only, and track the user who is making the change, and the time that the change was made. The configuration is stored in the database, and cached for performance. [LMS-1220]
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
"""
|
|
Model-Based Configuration
|
|
=========================
|
|
|
|
This app allows other apps to easily define a configuration model
|
|
that can be hooked into the admin site to allow configuration management
|
|
with auditing.
|
|
|
|
Installation
|
|
------------
|
|
|
|
Add ``config_models`` to your ``INSTALLED_APPS`` list.
|
|
|
|
Usage
|
|
-----
|
|
|
|
Create a subclass of ``ConfigurationModel``, with fields for each
|
|
value that needs to be configured::
|
|
|
|
class MyConfiguration(ConfigurationModel):
|
|
frobble_timeout = IntField(default=10)
|
|
frazzle_target = TextField(defalut="debug")
|
|
|
|
This is a normal django model, so it must be synced and migrated as usual.
|
|
|
|
The default values for the fields in the ``ConfigurationModel`` will be
|
|
used if no configuration has yet been created.
|
|
|
|
Register that class with the Admin site, using the ``ConfigurationAdminModel``::
|
|
|
|
from django.contrib import admin
|
|
|
|
from config_models.admin import ConfigurationModelAdmin
|
|
|
|
admin.site.register(MyConfiguration, ConfigurationModelAdmin)
|
|
|
|
Use the configuration in your code::
|
|
|
|
def my_view(self, request):
|
|
config = MyConfiguration.current()
|
|
fire_the_missiles(config.frazzle_target, timeout=config.frobble_timeout)
|
|
|
|
Use the admin site to add new configuration entries. The most recently created
|
|
entry is considered to be ``current``.
|
|
|
|
Configuration
|
|
-------------
|
|
|
|
The current ``ConfigurationModel`` will be cached in the ``configuration`` django cache,
|
|
or in the ``default`` cache if ``configuration`` doesn't exist. You can specify the cache
|
|
timeout in each ``ConfigurationModel`` by setting the ``cache_timeout`` property.
|
|
|
|
You can change the name of the cache key used by the ``ConfigurationModel`` by overriding
|
|
the ``cache_key_name`` function.
|
|
|
|
Extension
|
|
---------
|
|
|
|
``ConfigurationModels`` are just django models, so they can be extended with new fields
|
|
and migrated as usual. Newly added fields must have default values and should be nullable,
|
|
so that rollbacks to old versions of configuration work correctly.
|
|
"""
|