一个允许您使用12factor灵感的环境变量来配置Django应用程序的包。
项目描述
django-environ 是一个Python包,允许您使用十二因素方法使用环境变量来配置Django应用程序。
为此,它提供了一个简单的方法,使用从环境文件中获取并由操作系统提供的环境变量来配置Django应用程序
import environ
import os
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# Set the project base directory
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# False if not in os.environ because of casting above
DEBUG = env('DEBUG')
# Raises Django's ImproperlyConfigured
# exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
# Parse database connection url strings
# like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
# read os.environ['DATABASE_URL'] and raises
# ImproperlyConfigured exception if not found
#
# The db() method is an alias for db_url().
'default': env.db(),
# read os.environ['SQLITE_URL']
'extra': env.db_url(
'SQLITE_URL',
default='sqlite:////tmp/my-tmp-sqlite.db'
)
}
CACHES = {
# Read os.environ['CACHE_URL'] and raises
# ImproperlyConfigured exception if not found.
#
# The cache() method is an alias for cache_url().
'default': env.cache(),
# read os.environ['REDIS_URL']
'redis': env.cache_url('REDIS_URL')
}
这个包的想法是统一很多做同样事情的工具包:从一个字符串中获取 os.environ,解析并转换为一些有用的Python类型变量。为了做到这一点,并使用12factor方法,一些连接字符串以URL的形式表达,因此这个包可以解析它并返回一个urllib.parse.ParseResult。这些来自os.environ的字符串是从一个.env文件加载的,并通过setdefault方法填充到os.environ中,以避免覆盖真正的环境变量。在《Two Scoops of Django》书籍中使用了类似的方法,并在12factor-django文章中进行了解释。
使用 django-environ,你可以停止创建许多未版本化的 settings_*.py 来配置你的应用程序。请查看 cookiecutter-django 以了解如何与Django项目一起使用的具体示例。
功能支持
快速且容易的多环境部署
使用.env文件变量填充 os.environ
变量转换
将URL变量分解为Django特定包的设置
可选支持Docker风格的文件配置变量(使用 environ.FileAwareEnv 而不是 environ.Env)
项目信息
django-environ 在 MIT / X11 License 下发布,其文档位于 Read the Docs,代码在 GitHub 上,最新的版本在 PyPI 上。
它在Python 3.6+上进行了严格的测试,并正式支持Django 1.11、2.2、3.0、3.1、3.2、4.0、4.1和4.2。
如果您想为 django-environ 贡献,我们非常欢迎!
支持
如果您有任何问题、任何评论,或者在 django-environ 中遇到任何无法解决的问题,请 提交问题。
贡献
如果您想为 django-environ 贡献,请查看 当前问题。如果您想解决的问题或功能没有列出,请提交问题并着手解决。
错误报告
在提出问题之前,请确保您正在使用django-environ的最新版本。
请提供以下信息,以便我们能够尽快响应。
您正在使用的软件包的相关版本。
重现您的问题的步骤。
如果有异常,请提供完整的堆栈跟踪。
如果可能,请提供一个可执行的代码示例。
错误报告指南
使用GitHub问题搜索 — 检查问题是否已被报告。
检查问题是否已修复 — 尝试使用存储库中的最新 main 或 develop 分支来重现它。
隔离问题 — 创建一个简化的测试用例和一个实时示例。
一份好的错误报告不应让其他人需要追逐你以获取更多信息。请在报告中尽量详细。你的环境是什么?你将采取哪些步骤来重现问题?你使用的操作系统是否遇到问题?你期望的结果是什么?所有这些细节都将帮助人们修复任何潜在的错误。
功能请求
欢迎提出功能请求。但请花点时间了解你的想法是否符合项目的范围和目标。说服项目开发者这个功能的优点在于你。请尽可能提供详细信息和背景。
拉取请求
好的拉取请求——补丁、改进、新功能——非常有帮助。它们应该保持聚焦于范围,避免包含无关的提交。
如果你希望你的工作被考虑纳入项目,请遵循以下流程
检查开放的问题或打开一个新的问题,开始围绕一个功能想法或错误进行讨论。
在GitHub上克隆存储库,然后开始在develop分支(或从它分支)上进行更改。
编写一个测试,以显示错误已被修复或功能按预期工作。
发送拉取请求,并在合并和发布之前不断催促维护者。
如果你打算实现一个相当大的功能,我们很欢迎你打开一个GitHub上的问题,详细说明你的用例和预期解决方案,以讨论它可能对其他正在进行的工作产生的影响。
我们也感谢你花时间更新和编写你提交的任何更改的测试。
通过提交补丁,你同意允许项目所有者根据项目使用的相同许可证许可你的工作。
资源
发布信息
v0.11.2 - 2023年9月1日
修复
由于#490,撤销“添加变量扩展”功能。
安全策略
报告漏洞
如果你在django-environ中发现安全漏洞,请通过egrep@protonmail.ch给Serghei Iakovlev发送电子邮件。所有安全漏洞都将得到及时解决。
致谢
django-environ最初由Daniele Faraglia创建,并由Serghei Iakovlev维护。
贡献者名单的完整列表可以在GitHub上找到。
鸣谢
django-environ的存在离不开以下项目