【flask】flask項目配置 app.config


【理論】

 在很多情況下,你需要設置程序的某些行為,這時你就需要使用配置變量。在Flask中,配置變量就是一些大寫形式的Python變量,

你也可以稱之為配置參數或配置鍵。使用統一的配置變量可以避免在程序中以硬編碼的形式設置程序。

  在一個項目中,你會用到許多配置,Flask提供的配置,擴展(比如flask-sqlalchemy,flask-mail)提供的配置,還有程序特定的配置。

和平時使用的變量不同,這些配置變量都通過Flask對象的app.config屬性作為統一的接口來設置和獲取,它指向的Config類實際上是字典的的子類,

所以你可以像操作其它字典一樣操作它。 

  當我們創建1個Flask對象(也就是app),就可以通過app.config來查看這個app的所有配置變量

from flask import Flask app=Flask(__name__) print(type(app.config)) <class 'flask.config.Config'>#app.config的類型

print(app.config)#app.config 以鍵值對的形式 保存app的配置信息
<Config {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093}>

  常用配置及含義:

ENV:測試環境
production:生產環境,development:開發環境
DEBUG:是否開啟debug模式
SECRET_KEY:密鑰字符串
JSON_AS_ASCII:是否以ascii編碼展示響應報文
JSONIFY_MIMETYPE:響應報文類型

  值得注意的是:

  如果響應報文含中文,JSON_AS_ASCII的值為False,JSONIFY_MIMETYPE值為"application/json;charset=utf-8",

  否則響應報文中的中文會顯示亂碼

JSON_AS_ASCII =False JSONIFY_MIMETYPE = "application/json;charset=utf-8"

【實踐】

   Flask提供了很多種方式來加載配置。比如,你可以像在字典中添加一個鍵值對一樣來設置一個配置:

app.config['ADMIN_NAME']='Peter'

  注意:配置的名稱必須是全大寫形式,小寫的變量將不會被讀取

   除此之外,還可以通過把配置變量存儲在單獨的Python腳本、JSON格式的文件或是Python類中,config對象提供了相應的方法來導入配置

   和操作字典一樣,讀取一個配置就是從config字典里通過將配置的名稱作為鍵讀取對應的值:

value=app.config['ADMIN_NAME']

  注意:某些擴展需要讀取配置值來完成初始化操作,比如Flask-Mail,因此我們應該盡量將加載配置的操作提前,最好在程序實例app創建后就加載配置。

    下面將逐一演示各種配置方式,及其效果

   目錄結構:

 

  通過 鍵值對 配置app.config:

from flask import Flask app =Flask(__name__) print('配置前',app.config.get('FLASK_ENV')) #使用鍵值對配置app環境變量
app.config['FLASK_ENV']='ABC'
print('配置后',app.config.get('FLASK_ENV')) #------運行結果----------------
配置前 None 配置后 ABC

   使用update()方法可以一次加載多個值:

from flask import Flask
app =Flask(__name__)

print('配置前',app.config.get('FLASK_ENV'))
#使用 update()方法可以一次加載多個值
app.config.update(
    FLASK_ENV='ABC',
    AAAA=123456
)
print('配置后',app.config.get('FLASK_ENV'))
print('配置后',app.config.get('AAAA'))

#------運行結果----------------
配置前 None
配置后 ABC
配置后 123456

  通過 json文件 配置app.config:app.config.from_json

  settings.json文件內容如下:

{ "FLASK_ENV":"json" }

  代碼示例:

from flask import Flask app =Flask(__name__) import os basedir = os.path.abspath(os.path.dirname(__file__)) jsondir =os.path.join(basedir,'settings.json') print('配置前',app.config.get('FLASK_ENV')) #使用 json文件 配置app環境變量
app.config.from_json(jsondir) print('配置后',app.config.get('FLASK_ENV')) #------運行結果----------------
 配置前 None 配置后 json

  通過 字典 配置app.config: app.config.from_mapping

  代碼示例:

from flask import Flask app =Flask(__name__) configDict={ 'FLASK_ENV':'dictConfig' } print('配置前',app.config.get('FLASK_ENV')) #使用 json文件 配置app環境變量
app.config.from_mapping(configDict) print('配置后',app.config.get('FLASK_ENV')) #------運行結果----------------
配置前 None 配置后 dictConfig

   通過 python文件 配置app.config:

  settings.py文件中內容如下:

  py文件中的變量名將作為 app.config配置的key,變量值作為app.config[key]的value

FLASK_ENV='pyConfig'

代碼示例:

from flask import Flask app =Flask(__name__) print('配置前',app.config.get('FLASK_ENV')) #使用 json文件 配置app環境變量
app.config.from_pyfile('settings.py') print('配置后',app.config.get('FLASK_ENV')) #------運行結果----------------
配置前 None 配置后 pyConfig

  通過 配置類 配置app.config:

  classConfig.py定義了配置類BaseConfig

  類中的屬性作為 app.config的key,類中的屬性值作為app.config[key]的value

class BaseConfig(object): FLASK_ENV='objectConfig'

  代碼示例:

from flask import Flask app =Flask(__name__) from demoConfig.classConfig import BaseConfig objConfig=BaseConfig() print('配置前',app.config.get('FLASK_ENV')) #使用 json文件 配置app環境變量
app.config.from_object(objConfig) print('配置后',app.config.get('FLASK_ENV')) #------運行結果----------------
配置前 None 配置后 objectConfig

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM