分享python Flask框架的中配置文件加载的五种使用方法
这篇文章分享python Flask框架的中配置文件加载的五种使用方法
Flask配置文件管理的几种方式:
方法一:直接配置
#!/usr/bin/env python# encoding: utf-8from flask import Flaskimport timeapp = Flask(__name__)app.config['SEND_FILE_MAX_AGE_DEFAULT']=time.asctime()app.config['HOST']='www.aolens.cn'print app.config@app.route('/')def hello_world(): return 'Hello World! %s %s' %(app.config.get('SEND_FILE_MAX_AGE_DEFAULT'),app.config.get('HOST'))if __name__=='__main__': app.run()
可以看到一个全局的大字典:
立即学习“Python免费学习笔记(深入)”;
方法二:通过环境变量加载配置
创建一个环境变量文件。config.py
#内容为键值,不一定要是大字典里的HOST=localhostPOST=3306 #自己创建export CONFIG_SET=./config.py代码中:app.config.from_envvar('CONFIG_SET)@app.route('/')def hello_world():return "hello world %s %s" %(app.config.get('HOST'),app.config.get('POST'))
方法三:通过对象加载(常用)--from_object()
config对象代码--采用了 基于类继承的config结构,保存默认配置的Config类作为基类,其他类继承之。
创建一个文件Configlist.py
#!/usr/bin/env python# encoding: utf-8class Config(): #父类可以被下边的类继承到AUTHOR参数 AUTHOR='aolens'class DevelopmentConfig(Config): DEBUG = True SQL_URI='mysql://root:password@192.168.1.101/test'class ProductionConfig(Config): SQL_URI='mysql://root:password@192.168.1.101/devops' HOST='localhost'config ={ #将类写成字典的形式存储 'dev':DevelopmentConfig, 'pro':ProductionConfig, 'default':DevelopmentConfig}
调用Configlist.py
#!/usr/bin/env python# encoding: utf-8from flask import Flaskfrom configlist import *import timeapp = Flask(__name__)#对象加载,from config import *#第一种加载方式app.config.from_object(ProductionConfig)#第二种加载方式,加载简写的config短也可以加载的到#app.config.from_object(config['pro'])print app.config@app.route('/') #/表示URL后边+/,也可使其他URI,访问就是IP+URIdef hello_world(): return 'Hello World! %s %s %s' %(app.config.get('SQL_URI'),app.config.get('HOST'),app.config.get('AUTHOR'))if __name__=='__main__': app.run()
浏览器访问结果:
Hello World! mysql://root:password@192.168.1.101/devops localhost aolens
如何判断测试环境还是生产:#!/usr/bin/env python# encoding: utf-8from flask import Flaskfrom config2 import *import osimport timeapp = Flask(__name__)if os.path.exists("./pro"): app.config.from_object(config['pro'])elif os.path.exists("./dev"): app.config.from_object(DevelopmentConfig) print app.config@app.route('/TEST')def hello_world(): return 'Hello World! %s %s %s' %(app.config.get('SQL_URI'),app.config.get('HOST'),app.config.get('AUTHOR'))if __name__=='__main__': app.run()
方法四:通过配置文件--app.config.from_pyfile,config文件必须在app目录下
vim confile.pyHOST='locolhost'PORT=10000AUTHOR='aolens'from flask import Flaskapp.config.from_pyfile('./confile.py') #加载配置文件print app.config@app.route('/TEST')def hello_world(): return 'Hello World! %s %s %s' %(app.config.get('PORT'),app.config.get('HOST'),app.config.get('AUTHOR'))if __name__=='__main__': app.run()
方法五:是对方法四的一种改进 ConfigParser模块 配置文件管理
ConfigParser简介:
是用来读取配置文件的包,配置文件中括号[]内包含的为session。section下面为类似于key-value的配置文件内容。
格式如下:
vim test.conf[api] #sessionport=11111 #optionpath=/data/api/log[web]port=1002path=/data/web/log
使用:confile.py
import ConfigParserdef getconfig(filename,section=''): cf=ConfigParser.ConfigParser() #实例化 cf.read(filename) #读取配置文件 cf_items = dict(cf.items(section)) if cf.has_section(section) else {} #判断SECTION是否存在,存在把数据存入字典,没有返回空字典 return cf_itemsif __name__=='__main__': conf =getconfig('test.conf','web') print conf print conf['port'] print conf.get('path')
运行结果:
{'path': '/data/web/log', 'port': '1002'}
1002
/data/web/log
调用:demo.py
#!/usr/bin/env python# encoding: utf-8from confile import getconfigfrom flask import Flaskapp = Flask(__name__)#直接配置@app.route('/TEST')def hello_world(): conf=getconfig('test.conf','api') return 'Hello World! %s' %(conf['port'])if __name__=='__main__': app.run()
结果:
Hello World! 11111 #option