django envconf允许您使用12factor方法建议的环境变量配置应用程序。
django-envconf的Python项目详细描述
django envconf允许您使用环境变量配置应用程序 按照12因素法的建议。
不知羞耻的分叉&;从https://github.com/joke2k/django-environ更新
快速启动
- 在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.
- 在项目的根目录下创建一个.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
- 然后从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='')
环境值或默认值可以通过使用$符号引用另一个环境值。例如:
PROXIED_VAL='hello'TEST_VAL='$PROXIED_VAL'environ('TEST_VAL')=='helloenviron('UNKNOWN_VAL',default='$PROXIED_VAL')=='hello'
默认情况下会解析代理值。关闭解析代理值 将resolve_proxies=False传递到environ、environ.str或environ.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解析