Python+Flask.0004.FLASK配置管理之三种方式加载外部配置

简单介绍:

说明: 复杂的项目需要配置各种环境,若设置少可直接硬编码,设置多的话可通过加载配置/加载文件/加载变量的方式来设置

1

2

3

app.config.update(

    DEBUG=True,

)

扩展: app.config是flask.config.Config类的实例,继承子PY内置数据结构dict,所以可以使用如上update方法,支持传入多个键值对,其实app.config内置很多配置变量(http://flask.pocoo.org/docs/0.11/config/#Builtin%20Configuration%20Values),而且app.config支持多种更新配置的方式

注意: 不管使用哪种配置方式,配置中的键名称都必须大写,不然不会被识别加载,千万注意~

 

加载配置:

说明: 支持通过配置文件模块名或导入后的模块对象加载配置

# 方式一: app.config.from_object('config')传递为字符串参数时则会自动加载根目录下的config.py文件且只会加载文件中变量名为大写的变量

1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

from __future__ import absolute_import

# 说明: 导入公共模块

# 说明: 导入其它模块

AUTHOR = 'LIMANMAN'

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

from flask import Flask

# 说明: 导入其它模块

app = Flask(__name__)

app.config.from_object('config')

@app.route('/')

def hello_word():

    return app.config.get('AUTHOR')

if __name__ == '__main__':

    app.run(host='0.0.0.0', port=9000)

# 方式二: app.config.from_object(config)传递为对象时则会自动加载该对象,且只会加载对象中属性名为大写的属性,既然是对象那就表示传递类也是可以的.

1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

from __future__ import absolute_import

# 说明: 导入公共模块

# 说明: 导入其它模块

AUTHOR = 'LIMANMAN'

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

import config

from flask import Flask

# 说明: 导入其它模块

app = Flask(__name__)

app.config.from_object(config)

@app.route('/')

def hello_word():

    return app.config.get('AUTHOR')

if __name__ == '__main__':

    app.run(host='0.0.0.0', port=9000)

 

加载文件:

说明: 支持通过文件名加载,且后缀名不限于.py,默认如果文件不存在会抛异常,可使用silent=True设置不抛异常

1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

from __future__ import absolute_import

# 说明: 导入公共模块

# 说明: 导入其它模块

AUTHOR = 'LIMANMAN'

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

from flask import Flask

# 说明: 导入其它模块

app = Flask(__name__)

app.config.from_pyfile('config.py', silent=True)

@app.route('/')

def hello_word():

    return app.config.get('AUTHOR')

if __name__ == '__main__':

    app.run(host='0.0.0.0', port=9000)

 

加载变量:

说明: 支持通过环境变量加载,默认如果文件不存在会抛异常,可使用silent=True设置不抛异常

set CONFIG=config.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

from flask import Flask

# 说明: 导入其它模块

app = Flask(__name__)

app.config.from_envvar('CONFIG', silent=True)

@app.route('/')

def hello_word():

    return app.config.get('AUTHOR'or 'ERROR'

if __name__ == '__main__':

    app.run(host='0.0.0.0', port=9000)

注意: 特别是在Windows上set CONFIG=config.py时,千万别手欠把config.py加引号,而且视图函数一定要记得返回一个Response对象,由于None无法生成响应对象,所以一定要确定你返回的不是None

 

常用方式:

 

# 方式一: 在外部加载配置文件时通过from config import config来按需导入开发环境/预测试环境/正式环境不同的配置,通过app.config.from_object(config['default'])来加载配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

from __future__ import absolute_import

# 说明: 导入公共模块

# 说明: 导入其它模块

# 说明: 配置基类

class __Config(object):

    AUTHOR = 'LIMANMAN'

# 说明: 开发环境

class __DevsConfig(__Config):

    pass

# 说明: 预测环境

class __TestConfig(__Config):

    pass

# 说明: 正式环境

class __ProdConfig(__Config):

    pass

# 说明: 按需加载

config = {

    'default': __DevsConfig,

    'develop': __TestConfig,

    'testing': __ProdConfig,

    'product': __ProdConfig,

}

 

 

# 方式二: 在在外部加载配置文件时通过try ... except ...尝试导入本地配置,上线时删掉本地配置文件即可,记得忽略ImportError,不然线上导入找不到配置模块会报错

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# 51CTOBG: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

from __future__ import absolute_import

# 说明: 导入公共模块

# 说明: 导入其它模块

 

 

# 说明: 线上相关配置

 

 

# 说明: 覆盖线上配置

try:

    from devs_config import *

except ImportError, e:

    pass

 

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1865619

转载于:https://my.oschina.net/learnbo/blog/860483

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值