https://zhuanlan.zhihu.com/p/24055329
從環境變量中讀取配置
對於不適合寫在程序里的配置,比如密碼等,需要把配置寫入系統環境變量,然后使用os模塊的getenv()方法獲取,第二個參數作為默認值
set MAIL_USERNAME=me@greyli.com # windows
export MAIL_USERNAME=me@greyli.com # *unix
import os from flask import Flask app = Flask(__name__) app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME', 'me@greyli.com')
直接寫入主腳本
當你的程序很小的時候,可以直接把配置寫在主腳本里
from flask import Flask app = Flask(__name__) app.config['SECRET_KEY'] = 'some secret words' app.config['DEBUG'] = True app.config['ITEMS_PER_PAGE'] = 10
使用字典的update方法可以簡化代碼
from flask import Flask app = Flask(__name__) app.config.update( DEBUG=True, SECRET_KEY='some secret words', ITEMS_PER_PAGE=10 )
單獨的配置文件
程序逐漸變大時,配置也逐漸增多,寫在主腳本里太占地方,不夠優雅。我們可以創建一個單獨的配置文件。和上面同樣的配置,現在可以改寫為
config.py
import os basedir = os.path.abspath(os.path.dirname(__file__)) class BaseConfig: # 基本配置類 SECRET_KEY = os.getenv('SECRET_KEY', 'some secret words') ITEMS_PER_PAGE = 10 class DevelopmentConfig(BaseConfig): DEBUG = True SQLALCHEMY_DATABASE_URI = os.getenv('DEV_DATABASE_URL', 'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite') class TestingConfig(BaseConfig): TESTING = True SQLALCHEMY_DATABASE_URI = os.getenv('TEST_DATABASE_URL', 'sqlite:///' + os.path.join(basedir, 'data-test.sqlite') WTF_CSRF_ENABLED = False config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'default': DevelopmentConfig }
通過from_object()方法導入配置
from config import config # 導入存儲配置的字典 ... app = Flask(__name__) app.config.from_object(config['development']) # 獲取相應的配置類 ...
# 通過此方法得到配置文件的值
current_app.config['SQLALCHEMY_DATABASE_URI']