python-decouple简介

该篇文章主要翻译于https://pypi.python.org/pypi/python-decouple/

有不对的地方望各位大神指出,谢谢。

decouple简介

将设置从代码中分离开
decouple将帮助你解析你的程序配置文件,达到更改你的设置而不用重新部署程序的效果


decouple完成的事情:
1. 在ini或者.env文件中存储你的参数
2. 定义你的默认值
3. 适当的将你的配置转换成合适的值
4. 你的程序中只需要一个配置模块来进行设置
  decouple最开始是为django开发的,后面成为了一个独立通用的工具,将配置从代码中分离
 

为什么要使用decouple?

通常情况下,web框架会设置不同种类的参数:

    1. 语言环境和国际化
    2. 中间件和应用程序
    3. 资源存储相关:数据库,cache类。等
    4. 外部服务凭证:Amazon S3或者Twitter
    5.  预上线环境的设置
前两个是整个项目的设置,后面是部署实例的设置
 
 

为什么我们不直接使用环境变量呢?

我们都知道环境变量通过os.environ获取,但是返回的是字符串,比较棘手
例如,你有一 个环境换量DEBUG=False,你可能可以运行如下代码
 
这段代码将返回Tru e,因为os.environ['DEBUG'] 返回的是一个 字符串"False",因为这是一个非空字符串,所以返回True
Decouple提供一种能够解决这个问题的解决方案 :config('DEBUG', cast=bool)
 
if os.environ['DEBUG']:
    print True
else:
    print False

 Decouple的安装:

pip install python-decouple

 

使用方法:
你的settings.py.文件里面,你可以这么写:
 
    1. 导入config对象:
from decouple import config

     2. 获取配置参数

SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
EMAIL_HOST = config('EMAIL_HOST', default='localhost')
EMAIL_PORT = config('EMAIL_PORT', default=25, cast=int)

这些配置文件应该放在哪里?
Decouple支持两种类型:.ini文件和.env 文件
INI文件示例:
创建一个settings.ini文件,下一步在你的文件中可以写入如下格式的配置,例如:
[settings]
DEBUG=True
TEMPLATE_DEBUG=%(DEBUG)s
SECRET_KEY=ARANDOMSECRETKEY
DATABASE_URL=mysql://myuser:mypassword@myhost/mydatabase
PERCENTILE=90%%
#COMMENTED=42

 

注意:因为ConfigParser模块支持字符串填充的原因,百分号%应该由两个百分号,也就是%%代替
ENV文件示例:

在你的程序的根目录中创建一个.env文件,例如:

DEBUG=True
TEMPLATE_DEBUG=True
SECRET_KEY=ARANDOMSECRETKEY
DATABASE_URL=mysql://myuser:mypassword@myhost/mydatabase
PERCENTILE=90%
#COMMENTED=42
我在django中因该怎么使用呢?
如果我在我的程序根目录有一个.env 文件,下面是我的setting.py程序的一个片段,下面的程序,我推荐unipath和dj-database-url(这两个库很简单以后我再来介绍)一起配合使用:
# coding: utf-8
from decouple import config
from unipath import Path
from dj_database_url import parse as db_url
 
 
BASE_DIR = Path(__file__).parent
 
DEBUG = config('DEBUG', default=False, cast=bool)
TEMPLATE_DEBUG = DEBUG
 
DATABASES = {
    'default': config(
        'DATABASE_URL',
        default='sqlite:///' + BASE_DIR.child('db.sqlite3'),
        cast=db_url
    )
}
 
TIME_ZONE = 'America/Sao_Paulo'
USE_L10N = True
USE_TZ = True
 
SECRET_KEY = config('SECRET_KEY')
 
EMAIL_HOST = config('EMAIL_HOST', default='localhost')
EMAIL_PORT = config('EMAIL_PORT', default=25, cast=int)
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='')
EMAIL_HOST_USER = config('EMAIL_HOST_USER', default='')
EMAIL_USE_TLS = config('EMAIL_USE_TLS', default=False, cast=bool)
 
# ...

 注意没有定义的参数:

在上面的例子中,除了 SECRET_KEY = config('SECRET_KEY'),在.env中都有一个默认的配置参数。
如果'SECRET_KEY'在.env文件中一直都没有,decouple 将抛出一个UndefinedValueError
这种策略会当你在忘记配置一个参数的时候发生不可预期的行为
下面将介绍最重要的和环境变量相关的文件:
有些时候你想不通过.ini或者.env文件改变一个参数,从3.0开始,decouple将遵从unix的方式,环境变量优先级高于配置文件变量;
你可以覆盖配置文件的变量:
DEBUG=True python manage.py

这是什么原理呢?

Decouple 有5个类:

  • Config
    • 检索配置文件所在的位置
  • RepositoryIni
    • 按照顺序从os.environ,ini文件中读取值
    • 注意:从3.0开始unix环境变量高于配置文件变量
  • RepositoryEnv
    • 按照顺序从os.environ,.env文件中读取值
    • 注意:从3.0开始unix环境变量高于配置文件变量
  • RepositoryShell
    • 只是从os.environ中获取环境变量
  • AutoConfig
    • 检查你使用的配置
    • 它将从你的配置模块路径递归的搜索settings.ini或者.env文件

 一个简单的例子:

.evn文件

user_info=root
port=3306
ipadd=127.0.0.1
switch=on

pyton解析文件:

import decouple
config = decouple.AutoConfig()
ipadd = config('ipadd')
print ipadd

学习python介绍一个开源项目bootcamp,这个项目可以让你很快的入门django:

https://github.com/vitorfs/bootcamp

 

转载于:https://www.cnblogs.com/leeronggui/p/5380050.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值