Django constance

2018-12-18  本文已影响0人  WqyJh

用来管理动态配置,django 的配置大多写在 settings.py 里面,是静态配置,项目加载后就无法更改。但有些场景下我们需要动态配置,一个很简单的方式是使用一个 model 来表示配置,在 django admin 页面中修改配置的值。

django-constance 将这个需求封装成了一个模块,安装即可使用,支持以数据库或 Redis 作为后端

项目主页 https://github.com/jazzband/django-constance

安装

pip install django-constance

配置

# settings.py
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.staticfiles',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    ...
    'constance',
    'constance.backends.database',
)

CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'

# 配置了三个常量值,可以在 Admin 里面看到
# 可以通过 textfield 来编辑他们的值
CONSTANCE_CONFIG = OrderedDict({
    'tags': ('tag1,tag2', '标签'),
    'threshold': (100, '阈值'),
    # 指定字段按照 str 类型来处理
    'THE_ANSWER': (42, 'Answer to the Ultimate Question of Life', str),
})

配置完之后应该 migrate 一下,用于创建数据表,无需 makemigrations。

python manage.py migrate

自定义字段

CONSTANCE_ADDITIONAL_FIELDS = {
    # 定义一个选项字段,在 admin 页面上将使用 Select 组件来修改它的值
    'option_field': ['django.forms.fields.ChoiceField', {
        'widget': 'django.forms.Select',
        'choices': (('option1', 'option1'),
                    ('option2', 'option2'),
                    ('option3', 'option3'),
    }],
    # 定义一个文件字段,它的值是不带路径的文件名,后面可以添加 upload_to 参数指定上传路径
    'file_field': ['django.forms.FileField'],
}

EMPTY_FILE = 'empty'

CONSTANCE_CONFIG = OrderedDict({
    'option': ('option1', '选项', 'option_field'),
    'tags': ('tag1,tag2', '标签'),
    'threshold': (100, '阈值'),
    'doc': (EMPTY_FILE, '文档', 'file_field'),
})

修改常量

image

在 Admin 页面里可以修改常量值,按 save 保存。

使用常量

```python
from constance import config

# read as string
config.option
# read as string
config.tags
# read as an interger
config.threshold
# read as string represent a filename without prefix
config.doc
```
上一篇下一篇

猜你喜欢

热点阅读