网站后端_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网站后端_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置?相关的知识,希望对你有一定的参考价值。

简单介绍:

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


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文件且只会加载文件中变量名为大写的变量


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块
AUTHOR = ‘LIMANMAN‘

#!/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)传递为对象时则会自动加载该对象,且只会加载对象中属性名为大写的属性,既然是对象那就表示传递类也是可以的.


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块
AUTHOR = ‘LIMANMAN‘

#!/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设置不抛异常


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块
AUTHOR = ‘LIMANMAN‘

#!/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


#!/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


常用方式:


#!/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,
}

说明: 如上是我项目中最常用的方式,在外部加载配置文件时通过from config import config来按需导入开发环境/预测试环境/正式环境不同的配置,通过app.config.from_object(config[‘default‘])来加载配置



本文出自 “@Can Up and No BB...” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1865619

以上是关于网站后端_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置?的主要内容,如果未能解决你的问题,请参考以下文章

网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?

网站后端_Python+Flask.0014.FLASK模版相关之使用JinJa2模版渲染?

网站后端_Python+Flask.0012.FLASK域名相关之域名与动态子域名实现?

网站后端_Python+Flask.0007.FLASK构造跳转之301跳转与302重定向?

网站后端_Python+Flask.0006.FLASK地址转换之默认转换与自定义转换?

网站后端_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置?