介绍
为Django项目提供方便统一的配置信息管理模块,不仅可以简化配置项,还可以分别管理各个不同环境的配置。
安装依赖
django
django-environ==0.4.5
.env
配置文件注意事项
- 配置项中间不能有前后空格,例如:
EMAIL_PORT=2525
- 配置文件中不支持中文
- 如果要支持读取中文,将
environ/environ.py
中634行改为:
with open(env_file, encoding='utf-8') if isinstance(env_file, basestring) else env_file as f:
- 但是在linux服务器上读取中文时,返回的内容会多一层引号,像这样
"'中文'"
,这里我的处理方式是在自己使用这个变量的地方去一下引号,"'中文'".split("'")
区分本地和生产环境方便书写
默认选择本地环境的配置文件,部署生产时,设置env_file
环境变量即可
setting.py
代码如下:
import environ
env = environ.Env()
env_path = env.path("env_file", default=".envs/.local/.django")
READ_DOT_ENV_FILE = env.bool("DJANGO_READ_DOT_ENV_FILE", default=True)
if READ_DOT_ENV_FILE:
# OS environment variables take precedence over variables from .env
env.read_env(str(ROOT_DIR / env_path))
配置mysql url
# DATABASE
# ----------databasetype://username:password@host:port/database--------------------------------------------------------------------
DATABASE_URL=mysql://root:root@localhost:3306/mydatabase
# django-environ中database相关配置源码
DEFAULT_DATABASE_ENV = 'DATABASE_URL'
DB_SCHEMES = {
'postgres': DJANGO_POSTGRES,
'postgresql': DJANGO_POSTGRES,
'psql': DJANGO_POSTGRES,
'pgsql': DJANGO_POSTGRES,
'postgis': 'django.contrib.gis.db.backends.postgis',
'mysql': 'django.db.backends.mysql',
'mysql2': 'django.db.backends.mysql',
'mysql-connector': 'mysql.connector.django',
'mysqlgis': 'django.contrib.gis.db.backends.mysql',
'mssql': 'sql_server.pyodbc',
'oracle': 'django.db.backends.oracle',
'pyodbc': 'sql_server.pyodbc',
'redshift': 'django_redshift_backend',
'spatialite': 'django.contrib.gis.db.backends.spatialite',
'sqlite': 'django.db.backends.sqlite3',
'ldap': 'ldapdb.backends.ldap',
}
_DB_BASE_OPTIONS = ['CONN_MAX_AGE', 'ATOMIC_REQUESTS', 'AUTOCOMMIT']
配置Celery
# Celery
# ------------------------------------------------------------------------------
CELERY_BROKER_URL=amqp://guest:guest@127.0.0.1:5672//
配置Redis Cache
# Redis
# ------------------------------------------------------------------------------
# DefaultClient
REDIS_URL=redis://localhost:6379/?client_class=django_redis.client.DefaultClient
# django-environ中SCHEMES可选择类型
DEFAULT_CACHE_ENV = 'CACHE_URL'
CACHE_SCHEMES = {
'dbcache': 'django.core.cache.backends.db.DatabaseCache',
'dummycache': 'django.core.cache.backends.dummy.DummyCache',
'filecache': 'django.core.cache.backends.filebased.FileBasedCache',
'locmemcache': 'django.core.cache.backends.locmem.LocMemCache',
'memcache': 'django.core.cache.backends.memcached.MemcachedCache',
'pymemcache': 'django.core.cache.backends.memcached.PyLibMCCache',
'rediscache': REDIS_DRIVER,
'redis': REDIS_DRIVER,
}
bool类型配置书写
field=env.bool("field", default=True)
# django-environ中源码
BOOLEAN_TRUE_STRINGS = ('true', 'on', 'ok', 'y', 'yes', '1')
其他注意事项
- 在docker容器中如果更新了某个环境变量的值,直接重启容器是无法更新环境变量的值的。
必须重新up容器才能生效。 - 容器中环境变量值的存储的文件是在/etc/default/locale
网友评论