django environ docker允许您利用12个受因子启发的环境变量来配置具有docker机密的django应用程序。

django-environ-docker的Python项目详细描述


django environ允许您利用受12个因素启发的环境变量来配置django应用程序。

Latest version released on PyPiBuild status of the master branch on Mac/LinuxBuild status of the master branch on WindowsTest coveragePackage license

此模块合并了:

灵感来源:

这是安装django environ之前的settings.py文件

importosSITE_ROOT=os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))DEBUG=TrueTEMPLATE_DEBUG=DEBUGDATABASES={'default':{'ENGINE':'django.db.backends.postgresql_psycopg2','NAME':'database','USER':'user','PASSWORD':'githubbedpassword','HOST':'127.0.0.1','PORT':'8458',},'extra':{'ENGINE':'django.db.backends.sqlite3','NAME':os.path.join(SITE_ROOT,'database.sqlite')}}MEDIA_ROOT=os.path.join(SITE_ROOT,'assets')MEDIA_URL='media/'STATIC_ROOT=os.path.join(SITE_ROOT,'static')STATIC_URL='static/'SECRET_KEY='...im incredibly still here...'CACHES={'default':{'BACKEND':'django.core.cache.backends.memcached.MemcachedCache','LOCATION':['127.0.0.1:11211','127.0.0.1:11212','127.0.0.1:11213',]},'redis':{'BACKEND':'django_redis.cache.RedisCache','LOCATION':'127.0.0.1:6379/1','OPTIONS':{'CLIENT_CLASS':'django_redis.client.DefaultClient','PASSWORD':'redis-githubbed-password',}}}

之后:

importenvironroot=environ.Path(__file__)-3# three folder back (/a/b/c/ - 3 = /)env=environ.Env(DEBUG=(bool,False),)# set default values and castingenviron.Env.read_env()# reading .env fileSITE_ROOT=root()DEBUG=env('DEBUG')# False if not in os.environTEMPLATE_DEBUG=DEBUGDATABASES={'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')}public_root=root.path('public/')MEDIA_ROOT=public_root('media')MEDIA_URL='media/'STATIC_ROOT=public_root('static')STATIC_URL='static/'SECRET_KEY=env('SECRET_KEY')# Raises ImproperlyConfigured exception if SECRET_KEY not in os.environCACHES={'default':env.cache(),'redis':env.cache('REDIS_URL')}

您还可以将read_env()显式路径传递给.env文件。

创建一个.env文件:

DEBUG=on
# DJANGO_SETTINGS_MODULE=myapp.settings.dev
SECRET_KEY=your-secret-key
DATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database
# SQLITE_URL=sqlite:///my-local-sqlite.db
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=redis-un-githubbed-password

如何安装

$ pip install django-environ

如何使用

只有两个类,environ.Envenviron.Path

>>>importenviron>>>env=environ.Env(DEBUG=(bool,False),)>>>env('DEBUG')False>>>env('DEBUG',default=True)True>>>open('.myenv','a').write('DEBUG=on')>>>environ.Env.read_env('.myenv')# or env.read_env('.myenv')>>>env('DEBUG')True>>>open('.myenv','a').write('\nINT_VAR=1010')>>>env.int('INT_VAR'),env.str('INT_VAR')1010,'1010'>>>open('.myenv','a').write('\nDATABASE_URL=sqlite:///my-local-sqlite.db')>>>env.read_env('.myenv')>>>env.db(){'ENGINE':'django.db.backends.sqlite3','NAME':'my-local-sqlite.db','HOST':'','USER':'','PASSWORD':'','PORT':''}>>>root=env.path('/home/myproject/')>>>root('static')'/home/myproject/static'

有关与django项目一起使用的具体示例,请参见cookiecutter-django

支持的类型

  • str
  • 布尔
  • 内景
  • 浮动
  • json
  • 列表(foo=a,b,c)
  • 元组(foo=(a,b,c))
  • dict(bar=key=val,foo=bar)环境环境(bar=(dict,{}))
  • dict(bar=key=val;foo=1.1;baz=true)环境环境(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://
    • Geodjango的Sqlite和Spatialite:Spatialite://
    • 甲骨文:甲骨文://
    • 红移:红移://
    • LDAP:ldap://
  • 缓存URL
    • 数据库:dbcache://
    • dummy:dummycache://
    • 文件:filecache://
    • 内存:locmemcache://
    • memcached:memcache://
    • python内存:pymemcache://
    • redis:rediscache://
  • 搜索URL
    • 弹性搜索:弹性搜索://
    • solr:solr://
    • 呼:呼://
    • Xapian:Xapian://
    • 简单缓存:简单://
  • 电子邮件地址
    • smtp:smtp://
    • smtp+ssl:smtp+ssl://
    • smtp+tls:smtp+tls://
    • 控制台邮件:控制台电子邮件://
    • 文件邮件:文件邮件://
    • locmem邮件:memorymail://
    • 虚拟邮件:dummymmail://

提示

在url中使用不安全字符

为了使用不安全的字符,在设置到.env文件之前,必须使用urllib.parse.encode编码。

DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbname

参考https://perishablepress.com/stop-using-unsafe-characters-in-urls/

电子邮件设置

为了设置django的电子邮件配置,您可以使用以下代码:

EMAIL_CONFIG=env.email_url('EMAIL_URL',default='smtp://user@:password@localhost:25')vars().update(EMAIL_CONFIG)

sqlite网址

sqlite连接到基于文件的数据库。使用相同的url格式,省略主机名, 并使用“文件”部分作为数据库的文件名。 这有四个斜杠的效果 文件路径:sqlite:///full/path/to/your/database/file.sqlite。

测试

$ git clone git@github.com:joke2k/django-environ.git
$ cd django-environ/
$ python setup.py test

许可证

django environ是在mit许可下获得许可的-有关详细信息,请参见LICENSE_FILE文件

更改日志

0.4.2 - 13-April-2017

  • Confirm support for Django 1.11.
  • Support for Redshift database URL
  • Fix uwsgi settings reload problem (#55)
  • Update support for django-redis urls (#109)

0.4.1 - 13-November-2016

  • Fix for unsafe characters into URLs
  • Clarifying warning on missing or unreadable file. Thanks to @nickcatal
  • Add support for Django 1.10.
  • Fix support for Oracle urls
  • Fix support for django-redis

0.4.0 - 23-September-2015

  • Fix non-ascii values (broken in Python 2.x)
  • New email schemes - smtp+ssl and smtp+tls (smtps would be deprecated)
  • redis_cache replaced by django_redis
  • Add tuple support. Thanks to @anonymouzz
  • Add LDAP url support for database (django-ldapdb)
  • Fix psql/pgsql url

0.3 - 03-June-2014

  • Add cache url support
  • Add email url support
  • Add search url support
  • Rewriting README.rst

0.2.1 2013年4月19日

  • environ/environ.py: Env.__call__ now uses Env.get_value instance method

0.2 2013年4月16日

  • environ/environ.py, environ/test.py, environ/test_env.txt: add advanced float parsing (comma and dot symbols to separate thousands and decimals)
  • README.rst, docs/index.rst: fix TYPO in documentation

0.1 2013年4月2日

  • initial release

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

推荐PyPI第三方库


热门话题
Java布尔与空奇异性   是否有Java包来处理构建URL?   如何在php中编译和执行java文件?   java我的程序中有一个错误,表示错误:需要类、接口或枚举。怎么办?   java开始使用jung库   java找不到符号方法setRadioPower()   java如何创建正则表达式来替换已知字符串,同时保持可选参数不变?   spring如何在JavaSAPHybris中解析NoSuchElement:null?   oracle随机生成ID并在Java中高效持久化   在java中对未知维数数组的第一列进行排序   java存储在ms access表中的值存储顺序不正确   计划的任务中出现意外错误。JAVAlang.OutOfMemoryError:Java堆空间   带有水平滚动视图的java简单图像库   使用BFS时,java代码未正确遍历   java使用动作数据模型值调用Struts2 JSP中的静态方法帮助器类   java Box2d过滤掩码,组类别   java使用Undertow服务AngularJS