django envconf允许您使用12factor方法建议的环境变量配置应用程序。

django-envconf的Python项目详细描述


https://travis-ci.org/achedeuzot/django-envconf.svg?branch=masterhttps://coveralls.io/repos/github/achedeuzot/django-envconf/badge.svg?branch=master

django envconf允许您使用环境变量配置应用程序 按照12因素法的建议。

不知羞耻的分叉&;从https://github.com/joke2k/django-environ更新

快速启动

  1. settings.py文件的顶部添加“envconf”,如下所示:
fromenvconfimportEnvenv=Env(# Set default values and castingDEBUG=(bool,False))env.read_env()# Tries to read the `.env` file which is next to the `manage.py` script.# It's probably better to give the path to be sure it'll read the correct file.
  1. 在项目的根目录下创建一个.env文件
DEBUG=on  # or off / false
# DJANGO_SETTINGS_MODULE=myapp.settings.dev
SECRET_KEY=Tom-Marvolo-Riddle
DATABASE_URL=psql://user:un-gitted-password@127.0.0.1:8458/database
# DATABASE_URL=sqlite:////my-local-sqlite.db  # sqlite, notice the 4 slashes. See below for more cases.
CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213
REDIS_URL=rediscache://127.0.0.1:6379:1?client_class=django_redis.client.DefaultClient&password=un-gitted-password
  1. 然后从settings.py文件的环境中获取所需的变量:
DEBUG=env('DEBUG')# Defaults to FalseSECRET_KEY=env('SECRET_KEY')# Raises ImproperlyConfigured exception if SECRET_KEY is not setDATABASES={'default':env.db(),# Raises ImproperlyConfigured exception if DATABASE_URL not in os.environ'extra':env.db('SQLITE_URL',default='sqlite:////tmp/my-tmp-sqlite.db')}

安装

通过PYPI

(venv)$ pip install django-envconf

直接来自Git

(venv)$ pip install git+https://github.com/achedeuzot/django-envconf.git
# or
(venv)$ git clone https://github.com/achedeuzot/django-envconf.git &&cd django-envconf
(venv)$ python setup.py install

用法

在设置或配置模块中,首先导入标准解析器或django模式:

# DefaultfromenvconfimportEnvenv=Env()# Schemasfromenvconf.schemas.django110importDjango110Envasenvenv('DEBUG')# defaults to False# Defaults with the following:# DEBUG bool# SECRET_KEY str# DATABASES extracted from DATABASE_URL to dict()

env可以通过两种方式调用:

  • 显式键入:env('VAR_NAME', cast=bool)
  • 隐式类型(有关支持的类型,请参见下文):env.TYPE('ANOTHER_VAR')。如果未指定类型,则为默认值 到str

显式投射:

# Environment variable: MAIL_ENABLED=1mail_enabled=env('MAIL_ENABLED',cast=bool)# OR mail_enabled = env.bool('MAIL_ENABLED')assertmail_enabledisTrue

强制转换嵌套类型(列表和dict):

# Environment variable: FOO=1,2,3foo=env('FOO'),cast=list(int))assertfoo==[1,2,3]

您还可以设置默认值:

# Environment variable MAX_ROWS has not been definedmax_rows=env.int('MAX_ROWS',default=100)assertmax_rows==100

有一些方便的方法: -json(需要常规json字符串) -url(返回一个urlparse.ParseResult对象)

# Environment variable: DATA={"foo":"bar","baz":true}data=env.json('DATA')# data = {#   "foo": "bar",#   "baz": True,# }# Environment variable: SERVICE=ftp://user:password@example.com/some/path?var=foo>>>env.url('SERVICE')ParseResult(scheme='ftp',netloc='user:password@example.com',path='/some/path',params='',query='var=foo',fragment='')
< H3>代理值< EH3>

环境值或默认值可以通过使用$符号引用另一个环境值。例如:

PROXIED_VAL='hello'TEST_VAL='$PROXIED_VAL'environ('TEST_VAL')=='helloenviron('UNKNOWN_VAL',default='$PROXIED_VAL')=='hello'

默认情况下会解析代理值。关闭解析代理值 将resolve_proxies=False传递到environenviron.strenviron.unicode

例如:environ('DJANGO_SECRET_KEY', '$1233FJSIFWR44', resolve_proxies=False)

如果在使用environ时得到无限递归,则很可能有一个未解析的 环境字符串中的意外代理值。 例如environ('DJANGO_SECRET_KEY', '$1233FJSIFWR44')将导致 递归,除非添加resolve_proxies=False

这在heroku这样的环境中非常有用。这样,如果你 稍后改变主意,您只需要更改配置(见下文),而不需要更改代码。

# Environment variables: MAILGUN_SMTP_LOGIN=foo,# SMTP_LOGIN='$MAILGUN_SMTP_LOGIN'smtp_login=env('SMTP_LOGIN')assertsmtp_login=='foo'# Change of mind# Environment variales: MANDRILL_SMTP_LOGIN=bar# SMTP_LOGIN='$MANDRILL_SMTP_LOGIN'smtp_login=env('SMTP_LOGIN)  # Look ma',nohands!assertsmtp_login=='bar'

支持的类型

  • str
  • 布尔
  • 内景
  • 浮动
  • json
  • 列为csv(foo=a,b,c)
  • 元组(foo=(a,b,c))
  • dict(dict(bar=key=val,foo=bar)envconf.env(bar=(dict,{}))
  • dict(bar=key=val;foo=1.1;baz=true)envconf.env(bar=(dict(value=unicode,cast=dict(foo=float,baz=bool)),{}))
  • 网址
  • 路径(环境路径)
  • 数据库url
    • postgresql:postgres://、pgsql://、psql://或postgresql://
    • postgis:postgis://
    • mysql:mysql://或mysql2://
    • 用于geodjango的mysql:mysqlgis://
    • sqlite:sqlite://(sqlite://:memory:for in memory数据库,或sqlite:///文件/路径[4个斜杠!])
    • Geodjango的Sqlite和Spatialite:Spatialite://
    • 甲骨文:甲骨文://
    • LDAP:ldap://
  • 缓存URL
    • dummy:dummycache://
    • 数据库:dbcache://
    • 文件:filecache://
    • 内存:locmemcache://
    • memcached:memcache://
    • python内存:pymemcache://
    • redis:rediscache://
  • 搜索网址
    • 弹性搜索:弹性搜索://
    • solr:solr://
    • 呼:呼://
    • Xapian:Xapian://
    • 简单缓存:简单://
  • 电子邮件地址
    • 虚拟邮件:dummymmail://
    • smtp:smtp://
    • smtp+ssl:smtp+ssl://
    • smtp+tls:smtp+tls://
    • 控制台邮件:控制台电子邮件://
    • 文件邮件:文件邮件://
    • locmem邮件:memorymail://

测试

克隆repo并运行测试;)

(venv)$ git clone git@github.com/achedeuzot/django-envconf.git
(venv)$ cd django-envconf
(venv)$ python setup.py test

许可证

django envconf是在bsd许可下获得许可的—有关详细信息,请参见许可文件

兼容性

python 2.6、2.7、3.3、3.4、3.5版

django 1.4、1.5、1.6、1.7、1.8、1.9、1.10

学分

  • django-environ及其co当然是贡献者和自己的信誉!感谢您的精彩套餐:)

更改日志

0.1.0、0.2.0、0.3.*-2016年9月12日

  • fork fromdjango_environ和codebase的更新:删除6个依赖项,更好的oracle支持, 更好的URL解析

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Oracle将休眠为ISO 8601日期格式   当有线程时,swing计时器不会停止。睡在Java里面   如何使用swing在java中清空密码字段值(字符串)   如何在编辑文本字段上设置单词java(安卓)   单独类中的java OkHttp请求   java Tomcat配置文件/上下文xml似乎已经崩溃了。请确保它是可分析和有效的。有关详细信息,请参阅服务器日志   java在科尔多瓦的ActivityResult上传递   java如何在映射中保持插入顺序。工厂?   “DataOutputStream”和“ObjectOutputStream”之间的java差异   java从FTP文件列表中获取项目的时间戳   java如何在spring security中为每个人忽略一些资源/URL?   模板类嵌套时新的Java泛型类构造函数问题   java读取并查找文件大小为1GB的行   java如何使用字符串say“stop”停止整数格式的while循环   java是否可以在应用程序启动之间将JVM保留在内存中?   java Springboot出现“出现意外错误(类型=内部服务器错误,状态=500)”的问题