美文网首页
Django constance

Django constance

作者: WqyJh | 来源:发表于2018-12-18 17:29 被阅读0次

    用来管理动态配置,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
    ```
    

    相关文章

      网友评论

          本文标题:Django constance

          本文链接:https://www.haomeiwen.com/subject/zgilkqtx.html