[デマンド]
構成管理クラス管理フラスコのテスト環境を使用して、
フラスコdevelpment環境または本番環境を実行している制御するパラメータで(データベースの設定、電子メール設定は、環境に依存して変化します)
[思考]
1.すべての構成情報はconfig.iniの中に保存されています
DdevelopConfig、ProductionConfig 2. settings.pyベースのアクセス環境変数の値を別のテスト環境
app.pyでDdevelopConfigまたはProductionConfigクラスの例として3. 環境変数のクラスの値を取得します
オブジェクトフラスコアプリを作成した後、方法app.config.from_objectにより(OBJ)構成情報は、App.configファイルに書き込まれます。
最終的な効果があるように:
アプリを作成する場合は、create_app(CONFIG_NAME)によって、あなたがすることができ、テスト環境を切り替えるには柔軟
[コード例]
ディレクトリ構造:
config.ini
#フラスコオブジェクトの設定
[アプリケーション]
FLASK_CONFIG =生産
JSON_AS_ASCII = Falseの
JSONIFY_MIMETYPE = " ファイルアプリケーション/ JSON;のcharset = UTF-8 "
SECRET_KEYの = ' 秘密の文字列'
#のデータベース構成
[SQLAlchemyの]
SQLALCHEMY_TRACK_MODIFICATIONS = Falseの
#オンライン環境
[製造]
DATABASE_URL = ' MySQLの+はmysqlconnector://ユーザー名:パスワード@のIP :?ポート/ dbnameの文字セット= UTF8 '
#の開発環境
[開発]
DATABASE_URL = "+ mysqlconnectorのMySQL://ユーザー名:パスワード@ IP :?ポート/ dbnameの文字セット= UTF8 '
#電子メールの設定情報
[メール]
MAIL_SERVER = " smtp.126.com "
MAIL_USERNAME = ' [email protected] "
mail_password = " 認証コード"
settings.py
import os
from configparser import ConfigParser
basedir = os.path.abspath(os.path.dirname(__file__))
cfgpath = os.path.join(basedir, 'config.ini')
cf = ConfigParser()
cf.read(cfgpath)
# 获取邮件配置
def get_email_config(option):
return cf.get('email', option)
# 获取邮件配置
def get_app_config(option):
return cf.get('app', option)
# 获取数据库配置
def get_sqlalchemy_config(option):
return cf.get('sqlalchemy', option)
# 获取生产环境配置
def get_production_config(option):
return cf.get('production', option)
# 获取开发环境配置
def get_development_config(option):
return cf.get('development', option)
class BaseConfig(object):
SECRET_KEY = get_app_config('SECRET_KEY')
SQLALCHMEY_TRACK_MODIFICATIONS = False
MAIL_SERVER = get_email_config('MAIL_SERVER')
MAIL_PORT = 465
MAIL_USE_SSL = True
MAIL_USERNAME = get_email_config('MAIL_USERNAME')
MAIL_PASSWORD = get_email_config('MAIL_USERNAME')
MAIL_DEFAULT_SENDER = ('Bluelog Admin', MAIL_USERNAME)
class DevelopmentConfig(BaseConfig):
FLASK_ENV = 'development'
AAA = 'in DevelopmentConfig'
SQLALCHEMY_DATABASE_URI = get_development_config('DATABASE_URL')
class ProductingConfig(BaseConfig):
FLASK_ENV = 'production'
AAA='in ProductingConfig'
SQLALCHEMY_DATABASE_URI = get_production_config('DATABASE_URL')
config = {
'production': ProductingConfig,
'development': DevelopmentConfig
}
app.py
from flask import Flask
from settings import config,get_app_config
def create_app(config_name=None):
# 不指定config_name,默认取配置文件FLASK_CONFIG的值
# 指定config_name,则以指定的环境为主
if config_name is None:
config_name=get_app_config('FLASK_CONFIG')
app = Flask(__name__)
cfobj=config[config_name]
app.config.from_object(cfobj)
return app
#测试不指定config_name
app = create_app()
print(app.config['FLASK_ENV'])
print(app.config['AAA'])
print('*'*50)
#测试指定config_name
app = create_app('development')
print(app.config['FLASK_ENV'])
print(app.config['AAA'])
运行结果:
production
in ProductingConfig
**************************************************
development
in DevelopmentConfig