跳转到主要内容

Django应用的设置助手。

项目描述

Django AppSettings

Django应用的设置助手。

为什么还需要另一个应用设置应用?因为没有其他应用能满足我的需求!

这个应用简单易用,并且可以与单元测试覆盖设置一起工作。

安装

pip install django-app-settings

文档

在ReadTheDocs上

开发

运行所有测试: tox。见贡献指南

快速使用

# Define your settings class
import appsettings


class MySettings(appsettings.AppSettings):
    boolean_setting = appsettings.BooleanSetting(default=False)
    required_setting = appsettings.StringSetting(required=True)
    named_setting = appsettings.IntegerSetting(name='integer_setting')
    prefixed_setting = appsettings.ListSetting(prefix='my_app_')

    class Meta:
        setting_prefix = 'app_'


# Related settings in settings.py
APP_INTEGER_SETTING = -24
MY_APP_PREFIXED_SETTING = []


# Instantiate your class wherever you need to
appconf = MySettings()
assert appconf.boolean_setting is False  # True (default value)
assert appconf.required_setting == 'hello'  # raises AttributeError
assert appconf.named_setting < 0  # True
assert appconf.prefixed_setting  # False (empty list)


# Values are cached to avoid perf issues
with override_settings(APP_REQUIRED_SETTING='hello',
                       APP_INTEGER_SETTING=0):
    # ...but cache is cleaned on Django's setting_changed signal
    assert appconf.required_setting == 'hello'  # True
    assert appconf.named_setting < 0  # False


# You can still access settings through the class itself (values not cached)
print(MySettings.boolean_setting.get_value())  # explicit call
print(MySettings.boolean_setting.value)  # with property


# Run type checking and required presence on all settings at once
MySettings.check()  # raises Django's ImproperlyConfigured (missing required_setting)
# MySettings.check() is best called in django.apps.AppConfig's ready method

您可以轻松创建自己的Setting类以处理更复杂的设置。

import re

import appsettings
from django.core.exceptions import ValidationError


class RegexSetting(appsettings.Setting):
    def validate(self, value):
        re_type = type(re.compile(r'^$'))
        if not isinstance(value, (re_type, str)):
            # Raise ValidationError
            raise ValidationError('Value must be a string or a compiled regex (use re.compile)')

    def transform(self, value):
        # ensure it always returns a compiled regex
        if isinstance(value, str):
            value = re.compile(value)
        return value

请查看文档以了解更高级的使用方法。

许可证

软件遵循ISC许可证。

变更日志

未发布

0.7.2 (2023-09-07)

  • 废弃从环境变量加载设置值 (#98 由 @stinovlas)

  • 修复可选嵌套字典设置 (#92 由 @rastytheamateur)

  • 修复 usage.rst 中的拼写错误 (#102 由 @oto-stefan)

  • 修复文档构建 (#100 由 @stinovlas)

0.7.1 (2020-05-28)

  • 使用 override_settings 时忽略环境变量。

  • 不要宣布类型注解。

0.7.0 (2020-04-14)

  • 从环境变量中读取设置值。

  • 添加 FileSetting

  • 修复导致 NestedDictSetting 总是必需的 bug。

  • 添加对 python 3.8 和 Django 3.0 的支持。

  • 停止支持 python 2.7 和 3.4。

  • 停止支持过时的类型检查器。

  • 添加类型注解。

  • 在设置的所有错误中从 Setting.check 中抛出 ImproperlyConfigured

  • 将仓库迁移到 https://github.com/pawamoy/django-appsettings

  • 清理测试。

0.6.1 (2020-03-04)

  • 修复 transform_defaultNestedListSetting 中的问题,由 @stinovlas 完成(见 PR #61)。

0.6.0 (2019-08-27)

  • 添加 CallablePathSetting(见问题 #49 和 PR #52)。

  • 添加 NestedListSetting(见问题 #50 和 PR #53)。

  • NestedSetting 重命名为 NestedDictSetting(旧名称仍然可用但已废弃)。

0.5.1 (2019-05-23)

  • 修复空参数的默认值。

0.5.0 (2018-12-03)

  • 废弃设置检查器,改用验证器,类似于 Django 表单字段。

0.4.0 (2018-07-25)

  • 添加 NestedSetting 以方便管理嵌套设置。

0.3.0 (2017-11-30)

从 alpha 版本升级到 beta 版本。逻辑已重新设计。

  • 现在,AppSettings 的子类的一个实例将从项目设置动态获取设置值并缓存它们。这允许以相同的方式在代码和测试中使用实例,而不会损失性能。见问题 #16

  • 当 Django 发送 setting_changed 信号时(即在使用 TestCaseoverride_settings 时),将使缓存失效。见问题 #16

  • 设置主类现在接受可调用的默认值,并增加了两个新参数来控制其行为:call_default,它告诉是否应该调用默认值(如果可调用),以及 transform_default,它告诉是否应该通过 transform 方法转换默认值。见问题 #17

  • 设置类型检查器现在具有自定义参数,如 max_lengthemptykey_type,这些可以直接通过设置类作为关键字参数传递。有关更多信息,请参阅文档。

  • 设置类已被重写,使用类继承而不是难以调试的生成器。已经删除了像浮点列表或布尔集这样的复合类型,以更灵活的列表、集合和元组类型取而代之,这些类型现在接受一个可选的 item_type 参数。

  • ImportedObjectSetting 已重命名为 ObjectSetting,现在支持任意嵌套级别的对象路径。之前,它只支持到类或函数的对象路径,现在您可以为它提供到类中常量的路径,该类本身包含在包内的模块中。只要最深层的模块可以通过 importlib.import_module 导入,并且每个对象都可以通过 getattr 方法获取,它就可以正常工作。

非常感谢 ziima 分享了好的想法和思考!

0.2.5 (2017-06-02)

  • 添加六个依赖(现在为必需)。

  • Int 设置重命名为 Integer,将 Bool 设置重命名为 Boolean

  • 删除生成的元类获取器和检查器。

0.2.4 (2017-05-02)

  • 当设置默认为提供的默认值时,不会检查设置。

  • 设置类根据其类型获得了更好的默认值。

0.2.3 (2017-05-02)

  • Setting 类添加 full_name 属性。

  • Setting 类添加 required 参数(默认 False)。

0.2.2 (2017-04-17)

  • 在主模块中导入设置类以简化导入。

0.2.1 (2017-04-17)

  • 添加 PositiveIntPositiveFloat 设置。

  • 添加对 Django 1.11 的支持。

  • 实现基本的设置类。

0.2.0 (2017-04-17)

  • 实现基本的 Setting 类。

  • 锁定依赖项。

  • 将分发名称更改为 app-settings

0.1.0 (2017-03-23)

  • 在 PyPI 上进行 alpha 版本发布。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

django-app-settings-0.7.2.tar.gz (35.2 kB 查看哈希值)

上传时间

构建分发

django_app_settings-0.7.2-py2.py3-none-any.whl (14.6 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面