配置管理
復雜的項目需要配置各種環境。如果設置項很少,可以直接硬編碼進來,比如下面的方式:
app = Flask(__name__) app.config['DEBUG'] = True
app.config是flask.config.Config類的實例,繼承自Python內置數據結構dict,所以可以使用update方法:
app.config.update( DEBUG = True, ... )
app.config內置的全部配置變量可以參看Builtin Configuration Values。如果設置選項很多,想要集中管理設置項,應該將他們存放到一個文件里面。app.config支持多種更新配置的方式。假設現在有個叫做settings.py的配置文件,其中的內容如下:
A = 1
可以選擇如下三種方式加載:
- 通過配置文件加載
# 通過模塊名的字符串 app.config.from_object('settings') # 或者: import settings app.config.from_object(settings)
- 通過文件名字加載。但是不限於只使用.py后綴的文件名
# slient=True該文件不存在時不拋異常,返回False,默認是會拋出異常 app.config.from_pyfile('settings.py',slient=True)
總結
==========方式一:============ app.config['SESSION_COOKIE_NAME'] = 'session_lvning' #這種方式要把所有的配置都放在一個文件夾里面,看起來會比較亂,所以選擇下面的方式 ==========方式二:============== app.config.from_pyfile('settings.py') #找到配置文件路徑,創建一個模塊,打開文件,並獲取所有的內容,再將配置文件中的所有值,都封裝到上一步創建的配置文件模板中 print(app.config.get("CCC")) =========方式三:對象的方式============ import os os.environ['FLAKS-SETTINGS'] = 'settings.py' app.config.from_envvar('FLAKS-SETTINGS') ===============方式四(推薦):字符串的方式,方便操作,不用去改配置,直接改變字符串就行了 ============== app.config.from_object('settings.DevConfig') ----------settings.DevConfig---------- from app import app class BaseConfig(object): NNN = 123 #注意是大寫 SESSION_COOKIE_NAME = "session_sss" class TestConfig(BaseConfig): DB = "127.0.0.1" class DevConfig(BaseConfig): DB = "52.5.7.5" class ProConfig(BaseConfig): DB = "55.4.22.4"
要想在視圖函數中獲取配置文件的值,都是通過app.config來拿。但是如果視圖函數和Flask創建的對象app不在一個模塊。就得通過導入來拿。可以不用導入。直接導入一個current_app,這個就是當前的app對象,用current_app.config就能查看到了當前app的所有的配置文件
from flask import Flask,current_app @app.route('/index',methods=["GET","POST"]) def index(): print(current_app.config) #當前的app的所有配置 session["xx"] = "fdvbn" return "index"
調試模式
雖然app.run()這樣的方式適用於啟動本地的開發服務器,但是每次修改代碼后都要手動重啟的話,既不方便也不夠優雅。如果啟用了調試模式,服務器會在代碼修改后自動重新載入,並在發生錯誤時提供一個能獲得錯誤上下文及可執行代碼的調試頁面。
有兩種途徑來啟動調試模式:
- 直接在應用對象上設置:
app.debug = True
app.run()
- 作為run的參數傳入:
app.run(debug=True)
需要注意,開啟調試模式會成為一個巨大的安全隱患,因此他絕對不能用於生產環境中。