Django应用的设置助手。
项目描述
Django AppSettings
Django应用的设置助手。
为什么还需要另一个应用设置应用?因为没有其他应用能满足我的需求!
这个应用简单易用,并且可以与单元测试覆盖设置一起工作。
安装
pip install django-app-settings
文档
开发
运行所有测试: 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。
清理测试。
0.6.1 (2020-03-04)
修复 transform_default 在 NestedListSetting 中的问题,由 @stinovlas 完成(见 PR #61)。
0.6.0 (2019-08-27)
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 信号时(即在使用 TestCase 或 override_settings 时),将使缓存失效。见问题 #16。
设置主类现在接受可调用的默认值,并增加了两个新参数来控制其行为:call_default,它告诉是否应该调用默认值(如果可调用),以及 transform_default,它告诉是否应该通过 transform 方法转换默认值。见问题 #17。
设置类型检查器现在具有自定义参数,如 max_length、empty 或 key_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)
添加 PositiveInt 和 PositiveFloat 设置。
添加对 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9223480aeef00dec8f89ee603454309993726b263f4f975ee7be98918c5ae27b |
|
MD5 | def6c7a73b9e68f3712b44381953e18e |
|
BLAKE2b-256 | c4277141e90d1e4984722a5d0dc0c50203bdc14832a58e481cd89f2a1c87652d |
django_app_settings-0.7.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 438a3e1a9168825ad39c7e7ad1bc3c28fc17a128d117c4a702f5958abceee4fe |
|
MD5 | 678a56efc48559d294dea25e4c7016f4 |
|
BLAKE2b-256 | d909db382672f6d1cb99f4509b9001307550ba084637abdfcfd00bc352449d00 |