django extra settings

Delphi源码 2025-08-10

django-extra-settings

仅使用Django Admin进行配置和管理键入的额外设置。

安装

  • 运行pip install django-extra-settings
  • extra_settings添加到settings.INSTALLED_APPS
  • 运行python manage.py migrate
  • 运行python manage.py collectstatic
  • 重新启动您的应用程序服务器
  • 只需转到可以createupdatedelete设置的管理员即可。

用法

设置

所有这些设置都是可选的,如果未在settings.py中定义。

 # the name of the installed app for registering the extra settings admin.
EXTRA_SETTINGS_ADMIN_APP = "extra_settings" 
 # the name of the cache to use, if not found the "default" cache will be used.
EXTRA_SETTINGS_CACHE_NAME = "extra_settings" 
 # a list of settings that will be available by default, each item must contain "name", "type" and "value".
# check the #types section to see all the supported settings types.
EXTRA_SETTINGS_DEFAULTS = [
    {
        "name" : "SETTING_NAME" ,
        "type" : "string" ,
        "value" : "Hello World" ,
    },
    # ...
]
 # if True, settings names will be forced to honor the standard django settings format
EXTRA_SETTINGS_ENFORCE_UPPERCASE_SETTINGS = True 
 # if True, the template tag will fallback to django.conf.settings,
# very useful to retrieve conf settings such as DEBUG.
EXTRA_SETTINGS_FALLBACK_TO_CONF_SETTINGS = True 
 # the upload_to path value of settings of type 'file'
EXTRA_SETTINGS_FILE_UPLOAD_TO = "files" 
 # the upload_to path value of settings of type 'image'
EXTRA_SETTINGS_IMAGE_UPLOAD_TO = "images" 
 # if True, settings name prefix list filter will be shown in the admin changelist
EXTRA_SETTINGS_SHOW_NAME_PREFIX_LIST_FILTER = False 
 # if True, settings type list filter will be shown in the admin changelist
EXTRA_SETTINGS_SHOW_TYPE_LIST_FILTER = False 
 # the package name displayed in the admin
EXTRA_SETTINGS_VERBOSE_NAME = "Settings"

芹菜

警告

当将芹菜autodiscover_tasksforce=True一起使用时,它会触发一个激进的任务发现,该发现在完全初始化之前访问Django设置。此过早访问可防止django-extra-settings正确设置其默认配置值。更多信息在这里。

行政

您可以使用EXTRA_SETTINGS_ADMIN_APP设置在另一个安装的应用程序组中显示设置模型管理员。

您还可以通过使用多个已安装的应用程序注册设置管理员并使用queryset_processor参数过滤每个应用程序设置来具有更高级的控件。

配x如果您执行以上任一项操作,则必须为每个应用程序运行将在其管理员中显示extra_settings模型管理员的迁移(因为Django甚至为代理模型创建迁移)

管理员高级配置示例

在您的自定义应用程序photos.admin中。Admin模块:

 from extra_settings . admin import register_extra_settings_admin

register_extra_settings_admin (
    app = __name__ ,
    queryset_processor = lambda qs : qs . filter ( name__istartswith = "PHOTOS_" ),
    unregister_default = True ,
)

在您的自定义应用程序videos.admin模块中:

 from extra_settings . admin import register_extra_settings_admin

register_extra_settings_admin (
    app = __name__ ,
    queryset_processor = lambda qs : qs . filter ( name__istartswith = "VIDEOS_" ),
    unregister_default = True ,
)

默认情况下, "extra_settings"应用程序具有其自己的管理应用程序组。

缓存

您可以使用settings.CACHES["extra_settings"]设置自定义应用程序缓存选项,否则将使用"default"缓存:

 CACHES = {
    # ...
    "extra_settings" : {
        "BACKEND" : "django.core.cache.backends.locmem.LocMemCache" ,
        "TIMEOUT" : 60 ,
    },
    # ...
}

默认情况下,使用"extra_settings"缓存,如果要使用另一个缓存,则可以使用EXTRA_SETTINGS_CACHE_NAME设置设置它。

Python

您可以以编程方式创建读取更新删除设置:

类型

这是您可能需要使用的当前支持的设置类型的列表:

  • Setting.TYPE_BOOL
  • Setting.TYPE_DATE
  • Setting.TYPE_DATETIME
  • Setting.TYPE_DECIMAL
  • Setting.TYPE_DURATION
  • Setting.TYPE_EMAIL
  • Setting.TYPE_FILE
  • Setting.TYPE_FLOAT
  • Setting.TYPE_IMAGE
  • Setting.TYPE_INT
  • Setting.TYPE_JSON
  • Setting.TYPE_STRING
  • Setting.TYPE_TEXT
  • Setting.TYPE_TIME
  • Setting.TYPE_URL

创造

 from extra_settings . models import Setting

setting_obj = Setting (
    name = "SETTING_NAME" ,
    value_type = Setting . TYPE_STRING ,
    value = "django-extra-settings" ,
)
setting_obj . save ()

 from extra_settings . models import Setting

value = Setting . get ( "SETTING_NAME" , default = "django-extra-settings" )

更新

 from extra_settings . models import Setting

setting_obj = Setting (
    name = "SETTING_NAME" ,
    value_type = Setting . TYPE_BOOL ,
    value = True ,
)
setting_obj . value = False
setting_obj . save ()

删除

 from extra_settings . models import Setting

Setting . objects . filter ( name = "SETTING_NAME" ). delete ()

验证者

您可以为每个设置定义自定义验证器:

  • 必须使用完整的Python路径来定义验证器,例如。 myapp.mymodule.my_validator
  • 验证者称为传递单个参数(设置的值),如果该值有效,则应返回True ,否则返回FalseNone a ValidationError会提高。

模板

您可以在模板中检索设置:

{% load extra_settings %}

{% get_setting 'SETTING_NAME' default='django-extra-settings' %}

测试

您可以使用extra_settings.test.override_settings在测试过程中覆盖特定的设置。

它既可以用作装饰者,又可以用作上下文管理器:

 from extra_settings . test import override_settings

# decorator
@ override_settings ( SETTING_NAME_1 = "value for testing 1" , SETTING_NAME_2 = "value for testing 2" )
def test_with_custom_settings ( self ):
    pass

# context manager
def test_with_custom_settings ( self ):
    with override_settings ( SETTING_NAME_1 = "value for testing 1" , SETTING_NAME_2 = "value for testing 2" ):
        pass 

测试

 # clone repository
git clone https://git**hub*.com/fabiocaccamo/django-extra-settings.git && cd django-extra-settings

# create virtualenv and activate it
python -m venv venv && . venv/bin/activate

# upgrade pip
python -m pip install --upgrade pip

# install requirements
pip install -r requirements.txt -r requirements-test.txt

# install pre-commit to run formatters and linters
pre-commit install --install-hooks

# run tests
tox
# or
python runtests.py
# or
python -m django test --settings " tests.settings " 

执照

根据MIT许可发布。


支持

  • 在Github上明星这个项目
  • 在Github上关注我
  • ?在蓝调上跟随我
  • ?在Github上赞助我

参见

  • django-admin-interface默认的admin界面可由管理员本身自定义。弹出窗口被模式代替。 ??

  • django-cache-cleaner使用管理面板或管理命令轻松清除整个缓存或单个缓存。 ?

  • django-colorfield的简单颜色字段,在管理员中具有不错的颜色挑选。 ?

  • django-maintenance-mode - 显示维护模式打开时显示503错误页面。 ?

  • django-redirects完全控制的重定向。 ↪️

  • django-treenode可能是基于树的东西的最佳抽象模型 /管理员。 ?

  • python-benedict钥匙列表/键盘支持,I/O捷径(Base64,CSV,JSON,PICKLE,PLIST,PLIST,QUERY-String,Toml,XML,Yaml)和许多实用程序。

  • python-codicefiscale编码/解码意大利财政代码 - codifica/decodifica del codice Fiscale。 ????

  • python-fontbro友好的字体操作。 ?

  • python-fsutil懒惰开发人员的文件系统实用程序。 ?‍♂️

下载源码

通过命令行克隆项目:

git clone https://github.com/fabiocaccamo/django-extra-settings.git