跳转到主要内容

一个允许您利用12factor灵感的环境变量来配置您的Django应用程序的包。

项目描述

django-environ 是一个Python包,允许您使用Twelve-factor方法论,通过从环境文件和操作系统获取的环境变量来配置您的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 来配置你的应用程序。有关与 Django 项目一起使用的具体示例,请参阅 cookiecutter-django

功能支持

  • 快速简单的多环境部署

  • 使用 .env 文件变量填充 os.environ

  • 变量转换

  • 将 URL 变量展开为 Django 特定的设置包

  • 可选支持 Docker 风格的基于文件的配置变量(使用 environ.FileAwareEnv 而不是 environ.Env

项目信息

django-environMIT / X11 许可证 下发布,其文档位于 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 和 5.0。

如果您想为 django-environ 做贡献,我们非常欢迎!

支持

如果您有任何问题、评论,或者在 django-environ 中遇到无法解决的问题,请 提交问题

贡献

如果您想为 django-environ 做贡献,请查看 当前问题。如果有您想要但未列出的错误或功能,请创建一个问题并着手解决。

错误报告

在提出问题之前,请确保您正在使用 django-environ 的最新版本。

请在问题中提供以下信息,以便我们能够尽快回应。

  • 您正在使用的包的相关版本。

  • 重现您问题的步骤。

  • 如果有异常,请提供完整的堆栈跟踪。

  • 如有可能,请提供一个可执行的代码示例。

错误报告指南

  • 使用 GitHub 问题搜索 —— 检查问题是否已被报告。

  • 检查问题是否已被修复 —— 尝试使用存储库中的最新 maindevelop 分支来重现它。

  • 隔离问题 —— 创建一个简化的测试用例和一个实时示例。

一个好的错误报告不应该让别人需要追着你索要更多信息。请在报告中提供尽可能多的细节。你的环境是什么?执行哪些步骤可以复现问题?操作系统遇到了什么问题?你期望的结果是什么?所有这些细节都将帮助人们修复任何潜在的错误。

功能请求

我们欢迎功能请求。但请花点时间了解你的想法是否符合项目的范围和目标。说服项目的开发者这个功能的优点是你的责任。请尽可能提供详细的信息和背景。

拉取请求

好的拉取请求——补丁、改进、新功能——非常有帮助。它们应该保持范围集中,避免包含不相关的提交。

如果你想让你的工作被考虑加入项目,请遵循以下流程

  1. 查找开放的问题或创建新的问题,以开始关于功能想法或错误的讨论。

  2. 在GitHub上Fork仓库,开始修改develop分支(或从它创建分支)。

  3. 编写一个测试来展示错误已被修复或功能按预期工作。

  4. 发送一个拉取请求,并不断催促维护者直到它被合并并发布。

如果你打算实现一个相当大的功能,我们非常感谢你通过GitHub打开一个问题,详细说明你的用例和预期解决方案,以讨论它可能对正在进行的工作产生的影响。

我们还感谢你花时间更新和编写你提交的任何更改的测试。

通过提交补丁,你同意允许项目所有者以项目使用的相同许可证许可你的工作。

资源

发布信息

v0.11.3 - 0-Undefined-2023

更改

  • 正式支持Python 3.12。

  • 默认禁用内联注释处理,因为可能存在副作用。虽然这个功能本身很有用,但项目的理念要求它不应该默认对所有用户启用 #499

完整的变更日志.

安全策略

报告漏洞

如果你在django-environ中发现了一个安全漏洞,请通过egrep@protonmail.ch给Serghei Iakovlev发送电子邮件。所有安全漏洞都将得到及时处理。

致谢

django-environ最初由Daniele Faraglia创建,目前由Serghei Iakovlev维护。

所有贡献者的完整列表可以在GitHub上找到。

感谢

django-environ的存在离不开以下项目

项目详情


下载文件

下载适合你平台的文件。如果你不确定该选择哪个,请了解安装包的更多信息。

源分发

fdemmer-django-environ-0.11.3.tar.gz (57.1 kB 查看哈希值)

上传时间 源码

构建分发版

fdemmer_django_environ-0.11.3-py2.py3-none-any.whl (19.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持