分享python Flask架構的中設定檔載入的五種使用方法

來源:互聯網
上載者:User
這篇文章分享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()

可以看到一個全域的大字典:

<Config {'JSON_AS_ASCII': True, 'USE_X_SENDFILE': False, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_NAME': 'session', 'SESSION_REFRESH_EACH_REQUEST': True, 'LOGGER_HANDLER_POLICY': 'always', 'LOGGER_NAME': '__main__', 'DEBUG': False, 'SECRET_KEY': None, 'EXPLAIN_TEMPLATE_LOADING': False, 'MAX_CONTENT_LENGTH': None, 'APPLICATION_ROOT': None, 'SERVER_NAME': None, 'PREFERRED_URL_SCHEME': 'http', 'JSONIFY_PRETTYPRINT_REGULAR': True, 'TESTING': False, 'HOST': 'www.aolens.cn', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'PROPAGATE_EXCEPTIONS': None, 'TEMPLATES_AUTO_RELOAD': None, 'TRAP_BAD_REQUEST_ERRORS': False, 'JSON_SORT_KEYS': True, 'JSONIFY_MIMETYPE': 'application/json', 'SESSION_COOKIE_HTTPONLY': True, 'SEND_FILE_MAX_AGE_DEFAULT': 'Thu Mar 2 16:33:17 2017', 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SESSION_COOKIE_SECURE': False, 'TRAP_HTTP_EXCEPTIONS': False}>


方法二:通過環境變數載入配置

建立一個環境變數檔案。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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.