flask五:配置

1.创建配置文件:

# application/settings.py

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


def get_db_uri(db_info):
    engine = db_info.get("ENGINE") or "sqlite"
    driver = db_info.get("DRIVER") or "sqlite"
    user = db_info.get("USER") or ""
    password = db_info.get("PASSWORD") or ""
    host = db_info.get("HOST") or ""
    port = db_info.get("NAME") or ""
    name = db_info.get("NAME")
    return "{}+{}://{}:{}@{}:{}/{}".format(engine, driver, user, password, host, port, name)


class Config:
    DEBUG = False
    TESTING = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False


class DevelopConfig(Config):
    DEBUG = True
    db_info = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "123456",
        "HOST": "localhost",
        "PORT": "3306",
        "NAME": "flask_test"
    }
    SQLALCHEMY_DATABASE_URI = get_db_uri(db_info)


class TestConfig(Config):
    DEBUG = False
    TESTING = True
    db_info = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "123456",
        "HOST": "localhost",
        "PORT": "3306",
        "NAME": "flask_test"
    }
    SQLALCHEMY_DATABASE_URI = get_db_uri(db_info)


class StagingConfig(Config):
    db_info = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "123456",
        "HOST": "localhost",
        "PORT": "3306",
        "NAME": "flask_test"
    }
    SQLALCHEMY_DATABASE_URI = get_db_uri(db_info)


class ProductConfig(Config):
    db_info = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "123456",
        "HOST": "localhost",
        "PORT": "3306",
        "NAME": "flask_test"
    }
    SQLALCHEMY_DATABASE_URI = get_db_uri(db_info)


ENV = {
    "develop": DevelopConfig,
    "testing": TestConfig,
    "staging": StagingConfig,
    "product": ProductConfig,
    "default": DevelopConfig
}

 

 

 2.创建app时,导入配置对象

# application/__init__.py

from flask import Flask
from application.views import init_view
from application.models_ext import init_model
from application.settings import ENV


def create_app(env):
    app = Flask(__name__)

    app.config.from_object(ENV.get(env, "default"))

    init_model(app)

    init_view(app)

    return app

 

 

3.环境变量env,从框架入口manage.py中传入,自动根据主机OS配置的FLASK_ENV判断环境:开发,还是测试,或线上环境

# manage.py

import os

from flask_script import Manager
from application import create_app

env = os.environ.get("FLASK_ENV", "develop")

app = create_app(env)

manager = Manager(app)


if __name__ == '__main__':
    manager.run()

 

 

 4.环境变量FLASK_ENV获取

xiaohudeMacBook-Pro:local **$ vim ~/.bashrc
xiaohudeMacBook-Pro:local **$ source ~/.bashrc
xiaohudeMacBook-Pro:local **$ python
Python 3.7.5 (default, Nov  1 2019, 02:16:32) 
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ.get("FLASK_ENV")
'develop'

$ cat ~/.bashrc

export FLASK_ENV="develop"

 

posted on 2020-06-19 00:34  myworldworld  阅读(125)  评论(0)    收藏  举报

导航