pythonflask configlist.py_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?flaskimport?Flask
#?說明:?導入其它模塊
app=?Flask(__name__)
app.config.from_object('config')
.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?flaskimport?Flask
#?說明:?導入其它模塊
app=?Flask(__name__)
app.config.from_object(config)
.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?flaskimport?Flask
#?說明:?導入其它模塊
app=?Flask(__name__)
app.config.from_pyfile('config.py',?silent=True)
.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?flaskimport?Flask
#?說明:?導入其它模塊
app=?Flask(__name__)
app.config.from_envvar('CONFIG',?silent=True)
.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_configimport?*
except?ImportError,?e:
pass
或關注我們的官方微博微信,還有更多驚喜哦~
總結
以上是生活随笔為你收集整理的pythonflask configlist.py_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: raid 物理盘缓存状态_服务器raid
- 下一篇: OFDM 中的ICI和ISI