4 工廠方式建立

2022-07-02 16:06:15 字數 3979 閱讀 2133

我們還需要考慮一件事情,在我們環境我們一般有三個環境,一般都是測試環境,開發環境,生產環境

這三個環境我們在config裡面設定。因為抽取了就應該在固定的位置編寫

我們class乙個數我這邊定義development,把配置環境config交到裡面,現在還不知道怎麼寫我們就pass停止,後面的測試和生產乙個道理

class developmentconfig(config):

#開發環境

pass

class productionconfig(config):

#生產環境

pass

class testconfig(config):

#測試環境

pass

這樣我們的三個環境就成了,成了後我們就完成基本的配置,一般來說我們的開發環境,和我們當前的config配置是一樣的,所以我們在後生產環境後面寫pass就不做修改。而生產環境不一樣,我們把debug稍微的修改一下。

class productionconfig(config):

#生產環境

debug = false #這裡表示我們不開啟debug

還有一般我們開發和生產的資料庫也需要修改,因為你做開發的時候肯定會做增刪改查的乙個工作等,所以我們不能操作線上的真實的資料庫。所以我們會專門給乙個測試資料庫。

class productionconfig(config):

#生產debug = false

sqlalchemy_database_uri = "mysql:"

這裡我們就寫乙個demo代表生產資料庫,現在我們基本的就配置完成。

我們把這行**注釋

from config import config
重新匯入三個環境

from config import developmentconfig,productionconfig,testconfig

#分別是開發,生產,測試

如果是生產環境,三個地方要做修改

變成redis_store = strictredis(host=developmentconfig.redis_host, port=developmentconfig.redis_post)

如果是測試環境或者開發環境還是一樣,但是這樣的不好用,改的太多太多了。

所以我我們建立乙個函式來接收乙個引數。  

完整**引數"

):)redis_store = strictredis(host=developmentconfig.redis_host, port=developmentconfig.redis_post)

#設定redis的存放資料庫

開始csrf保護開啟

完整改動**

我們來到mange,如果我們做了這件事情

# manager.add_command("mysql",migratecommand)#建立mysql的指令碼命令 

# manager.add_command("mysql",migratecommand)#建立mysql的指令碼命令   

configs=
現在我們在字典裡完成乙個鍵乙個值,我們用字典把三個值分別放到字典裡三個值裡面。來到__init__.py裡面我們兩行**就不要了

# from config import config

from config import developmentconfig,productionconfig,testconfig

不要了,直接刪除。

我們直接把字典導進來

from config import configs
來到manage,

dev引數一半過去後,來到__init__.py裡面,拿env接收

然後把這三個地方全部修改成configs[env]

我們執行後會發現報錯

再次執行我們就會執行成功

下面對比一下**,分別是__init__.py,manage,config.

from flask import

flask,session

from flask_sqlalchemy import

sqlalchemy

from redis import

strictredis

from flask_session import

session

from flask_wtf import

csrfprotect

from config import

configs

#def

) redis_store = strictredis(host=configs[env].redis_host, port=configs[env].redis_post)

#設定redis的存放資料庫

開始csrf保護開啟

manage

from flask_script import

manager

from flask_migrate import

migrate,migratecommand

#from info import

dev"

)建立指令碼管理者

#manager.add_command("

mysql

",migratecommand)#

建立mysql的指令碼命令/"

)def

index():

#redis_store.set("name","laoli")

#測試session

#session["age"]=28

return

"hello"if

__name__=="

__main__":

manager.run()

config

#

配置類from redis import

strictredis

class

config:

debug =true

sqlalchemy_database_uri="

mysql:

"sqlalchemy_track_modifications=false

redis_host = "

127.0.0.1

"redis_post = 6379secret_key ="

asdsadsada

"session_type = "

redis"#

指定用redis來儲存session資訊

session_redis = strictredis(host=redis_host, port=redis_post)#

指定那個redis來儲存session資訊

session_use_signer= true #

設定是否使用秘鑰

session_permanent=60*60*24 #

設定cession的儲存時間

class

developmentconfig(config):

#開發環境

pass

class

productionconfig(config):

#生產環境

debug =false

sqlalchemy_database_uri = "

mysql:

"class

testconfig(config):

#測試環境

pass

configs=

Factory Method工廠方法 建立型模式

factory method 工廠方法 從耦合關係談起 耦合關係直接決定著軟體面對變化時的行為 模組與模組之間的緊耦合使得軟體面對變化時,相關的模組都要隨之更改 模組與模組之間的松耦合使得軟體面對變化時,一些模組更容易被替換或者更改,但其他模組保持不變 軟體需求的變化不應該是工程師抱怨的問題,而應該...

建立型模式 工廠方法

概述 定義乙個用於建立物件的介面,讓子類決定例項化哪一類。factorymethod使乙個類例項化延遲到其子類。適用性 當乙個類不知道它所必須建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。當類建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是 者這一資...

建立型 工廠方法模式

抽象產品 定義產品的介面,產品物件的公共父類 具體產品 實現產品的介面 抽象工廠 宣告工廠方法,返回乙個產品 具體工廠 抽象工廠的子類,客戶端呼叫,返回乙個具體的例項 需求 日誌記錄器可以通過很多途徑儲存日誌,使用者可以修改配置檔案,靈活的更換日誌記錄的方式,為了更好的封裝記錄器的初始化過程,並保證...