Package: dj-environ
Dj-environ allows you to utilize 12factor inspired environment variables to configure your Django application.This is yoursettings.pyfile before you have installeddj-environimportosSITE_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',}}}After: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')}You can also passread_env()an explicit path to the.envfile.Create a.envfile:DEBUG=on# DJANGO_SETTINGS_MODULE=myapp.settings.devSECRET_KEY=your-secret-keyDATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database# SQLITE_URL=sqlite:///my-local-sqlite.dbCACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213REDIS_URL=rediscache://127.0.0.1:6379:1?client_class=django_redis.client.DefaultClient&password=redis-un-githubbed-passwordHow to install$ pip install dj-environHow to useThere are only two classes,environ.Envandenviron.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'Supported Typesstrboolintfloatjsonlist (FOO=a,b,c)tuple (FOO=(a,b,c))dict (BAR=key=val,foo=bar) #environ.Env(BAR=(dict, {}))dict (BAR=key=val;foo=1.1;baz=True) #environ.Env(BAR=(dict(value=unicode, cast=dict(foo=float,baz=bool)), {}))urlpath (environ.Path)db_urlPostgreSQL: postgres://, pgsql://, psql:// or postgresql://PostGIS: postgis://MySQL: mysql:// or mysql2://MySQL for GeoDjango: mysqlgis://SQLITE: sqlite://SQLITE with SPATIALITE for GeoDjango: spatialite://Oracle: oracle://LDAP:ldap://cache_urlDatabase: dbcache://Dummy: dummycache://File: filecache://Memory: locmemcache://Memcached: memcache://Python memory: pymemcache://Redis: rediscache://search_urlElasticSearch: elasticsearch://Solr: solr://Whoosh: whoosh://Xapian: xapian://Simple cache: simple://email_urlSMTP: smtp://SMTP+SSL: smtp+ssl://SMTP+TLS: smtp+tls://Console mail: consolemail://File mail: filemail://LocMem mail: memorymail://Dummy mail: dummymail://TipsUsing unsafe characters in URLsIn order to use unsafe characters you have to encode withurllib.parse.encodebefore you set into.envfile.DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbnameSeehttps://perishablepress.com/stop-using-unsafe-characters-in-urls/for reference.Email settingsIn order to set email configuration for django you can use this code:EMAIL_CONFIG=env.email_url('EMAIL_URL',default='smtp://user@:password@localhost:25')vars().update(EMAIL_CONFIG)Tests$ git clone https://github.com/ratson/dj-environ.git
$ cd dj-environ/
$ python setup.py testCreditsThis is a fork ofdjango-environ,
which has the following differences,Support PostgreSQL URL using unix domain socket paths, e.g. postgres:////var/run/postgresql/db