python flask config.py 常量配置

config.py

與app文件夾同級(jí),使用層次結(jié)構(gòu)的配置類

代碼內(nèi)容實(shí)例如下

import os
class Config: ##config子類
  DEBUG = False
  TESTING = False
  
  @staticmethod
  def init_app(app):
    pass
class ProductionConfig(Config):#繼承config基類
#產(chǎn)品中實(shí)際使用的config模塊
  SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s/%s?charset=utf8' % (MysqlUser, MysqlPass, MysqlHost, MysqlDB)
  SECRET_KEY = 'This is my key'
  SQLALCHEMY_TRACK_MODIFICATIONS = True
  UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), 'main/media')
  UPLOADED_PHOTOS_DEST = os.path.join(os.path.dirname(__file__), 'main/media/images')
class DevelopmentConfig(Config):
##開發(fā)人員使用的Config
  DEBUG = True
  SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s/%s?charset=utf8mb4' % (MysqlUser, MysqlPass, MysqlHost, MysqlDB)
  SECRET_KEY = 'This is my key'
  SQLALCHEMY_TRACK_MODIFICATIONS = True
class TestingConfig(Config):
#用于測試的config類
    TESTING = True
config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

通過內(nèi)置的字典訪問不同的類

關(guān)于app /create_app 與config之間的關(guān)系

在manage.py 中我們可以看到
app = create_app('default')
create_app函數(shù)是這樣定義的

from config import config
def create_app(config_name):
    app = Flask(__name__)
    CORS(app, supports_credentials=True)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)  
    ···
    return app

在這段函數(shù)中我們可以看出來
app.config.from_object(config[config_name])
config[config_name].init_app(app)
這段代碼,相當(dāng)于把上面我們提到的這個(gè)

config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

中的default,添加到了app的上下文中,使得app(main)中的任何一個(gè)文件都可以不使用絕對(duì)路徑,通過
import config來直接導(dǎo)入配置選項(xiàng)
這就是為什么我在后期import的時(shí)候不需要..config的原因

為什么我們這么麻煩的專門建立一個(gè)Config.py文件來把所有的常量寫入到這里呢?

原因如下
1.安全性考慮:再多人團(tuán)隊(duì)協(xié)作中,倉庫都是相互公開的,我們?cè)诖a的時(shí)候,如果直接把包含敏感信息的代碼寫在工作區(qū)的話,很容易造成信息的泄露,比如說MYSQLUESER PASSWORD等,還有用戶的郵箱個(gè)人信息等等,統(tǒng)一放在一個(gè)config中進(jìn)行維護(hù),將這些敏感信息放在電腦中,在通過os模塊來引用,可以大大提高安全性,不會(huì)讓你的密碼在代碼中裸奔。
2.方便性:各種常量分開散布在各個(gè)模塊的各個(gè)文件當(dāng)中,需要修改的時(shí)候,需要找到含有大量工程代碼的文件中進(jìn)行修改,維護(hù)起來費(fèi)時(shí)費(fèi)力,不如把所有常量都保存在一個(gè)文件中,便于維護(hù)和修改
3.團(tuán)隊(duì)協(xié)作中,每個(gè)人的本地?cái)?shù)據(jù)庫的賬號(hào)密碼都不一樣,服務(wù)器上的也不一樣,所以,每個(gè)人的config也都不一樣,push的時(shí)候可以跳過config模塊,這樣每個(gè)人pull下來的代碼不包含config.py,這樣就不用每次pull的時(shí)候都修改一次數(shù)據(jù)庫密碼了。
4.可讀性高。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • jHipster - 微服務(wù)搭建 CC_簡書[http://www.itdecent.cn/u/be0d56c4...
    quanjj閱讀 927評(píng)論 0 2
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,325評(píng)論 0 10
  • 模塊和包 一 模塊 1 什么是模塊? 常見的場景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是...
    go以恒閱讀 2,344評(píng)論 0 4
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,957評(píng)論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,641評(píng)論 1 32

友情鏈接更多精彩內(nèi)容