Flask 如何配置多環境

Flask 如何配置多環境

原文地址:https://wxnacy.com/2017/08/15/python-2017-08-15-flask-env-config/

一個完整的web項目都需要配置數據庫連接和開發環境、生產環境靈活切換,今天來在
各個環境中切換數據庫連接

首先添加指定環境腳本

在項目根目錄下創建環境腳本 touch env.sh 並編輯

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash

ENV=$1

if [ ! ${ENV} ]
then
    ENV=local
fi

export PYTHONPATH=./        # 項目跟目錄
export FLASK_CONFIG=${ENV}  # 當前環境 可選 local product dev test

 

該文件起到兩個作用
1、PYTHONPATH:項目根目錄。
2、FLASK_CONFIG:當前環境,使用方法

然後執行命令,使配置生效

1
$ source env.sh ${env}      # env=local|product|dev|test 默認local

 

添加環境信息文件

1
2
3
4
$ mkdir app
$ cd app
$ touch local_config.py
$ vim local_config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''配置文件程序'''
__author__ = "wxnacy([email protected])"
__copyright__ = "Copyright of wxnacy (2017)."

class ProductionConfig():
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4'

class DevelopmentConfig():
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4'

class TestingConfig():
    DEBUG = True

class LocalConfig():
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4'

該文件配置了各個環境數據庫連接信息

添加文件config.py來根據環境讀取當前環境內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''配置信息'''
__author__ = "wxnacy([email protected])"
__copyright__ = "Copyright of wxnacy (2017)."


from flask import Flask
from werkzeug.contrib.fixers import ProxyFix
import os

CONFIG_NAME_MAPPER = {
    'local': 'app.local_config.LocalConfig',
    'product': 'app.local_config.ProductionConfig',
    'dev': 'app.local_config.DevelopmentConfig',
    'test': 'app.local_config.TestingConfig'
}

def create_app(flask_config_name=None):
    """
    創建配置
    :return:
    """
    app = Flask(__name__)
    app.wsgi_app = ProxyFix(app.wsgi_app)
    env_flask_config_name = os.getenv('FLASK_CONFIG')
    config_mapper_name = flask_config_name or env_flask_config_name or 'local'
    config_name = CONFIG_NAME_MAPPER[config_mapper_name]
    app.config.from_object(config_name)

    return app


app = create_app()

修改run.py 來讀取環境內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''配置信息'''
__author__ = "wxnacy([email protected])"
__copyright__ = "Copyright of wxnacy (2017)."


from app.config import app

@app.route('/test')
def mysql():
    return app.config['SQLALCHEMY_DATABASE_URI']

app.run()

現在項目的目錄結構爲

1
2
3
4
5
6
myproject:
    app:
        config.py
        local_config.py
    run.py
    env.sh

 

運行

本地環境

1
2
3
4
5
6
7
8
9
$ source env.sh
$ python run.py
$ curl http://localhost:5000/test
mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4

$ source env.sh product
$ python run.py
$ curl http://localhost:5000/test
mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章