完全版 - [フラスコ]テスト環境の構成クラス管理アプリを使用して

[デマンド]

  構成管理クラス管理フラスコのテスト環境を使用して、

  フラスコ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

 

おすすめ

転載: www.cnblogs.com/kaerxifa/p/11785450.html