简单介绍:
说明: 复杂的项目需要配置各种环境,若设置少可直接硬编码,设置多的话可通过加载配置/加载文件/加载变量的方式来设置
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