Flask app.config 的配置


原理如下:

 
image.png

1、通過調用自定義config.py文件中config字典,可以得到一個類,
這個類里面定義的都是類變量,這些變量就是自定義的一些配置項。
如下config.py : :

import os BASEDIR = os.path.abspath(os.path.dirname(__file__)) class Config: """base config""" SECRET_KEY = os.environ.get('SECRET_KEY') or 'secret key' SQLALCHEMY_COMMIT_ON_TEARDOWN = True SQLALCHEMY_TRACK_MODIFICATIONS = True FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN') FLASKY_MAIL_SENDED = 'jianghan@julanling.com' # 發件人地址 FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]' # 郵件主題前綴 class ProductionConfig(Config): """運行環境配置""" SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \ 'sqlite:///' + os.path.join(BASEDIR, 'data.sqlite') ...... config = { 'development': DevelopmentConfig, 'testing': ProductionConfig, 'production': ProductionConfig, 'default': DevelopmentConfig } 

2、利用Flask類,實例app,並把自定義配置傳進去。
如下app.py:

# __name__是本文件名字, # Flask類里面,會根據此名字,找到app.py所在目錄,即默認為根目錄。 app = Flask(__name__) app.config.from_object(config['testing']) 

3、配置原理:

自定義配置類給到app.config。
app.config 來自於 self.make_config()
self.make_config() 返回的值是 config_class()
config_class 就是Config類。
config_class(),是config加個括號,其實就是Config()

通過上面一系列的串聯,可以看出:
app.config,就是Config()

之所以要在中間加一些方法,如mke_config(),是為了給Config()添加一些默認值。
例如:根目錄root_path、默認配置self.default_config等。
如下:

    def make_config(self, instance_relative=False): root_path = self.root_path if instance_relative: root_path = self.instance_path return self.config_class(root_path, self.default_config) 

其實,在你在寫到app.config時,就已經創建了一個帶默認配置項的Config()實例。
Config類有很多方法可以修改默認配置和添加新配置。如from_object()

當寫到 app.config.from_object(config),其實就是對默認配置的修改和添加。

參考:很多,在網上了其他人的一些解釋,然后自己再看看源碼,就大概明白了。



 

 

logging模塊

flask配置日志

代碼

from logging.handlers import RotatingFileHandler from flask import Flask, request import logging app = Flask(__name__) app.config['PROPAGATE_EXCEPTIONS'] = False # 設置是否傳遞異常 , 如果為True, 則flask運行中的錯誤會顯示到網頁中, 如果為False, 則會輸出到文件中 class RequestFormatter(logging.Formatter): # 自定義格式化類 def format(self, record): """每次生成日志時都會調用, 該方法主要用於設置自定義的日志信息 :param record 日志信息""" record.url = request.url # 獲取請求的url record.remote_addr = request.remote_addr # 獲取客戶端的ip return super().format(record) # 執行父類的默認操作 # flask中提供了兩個日志 1> werkzeug 記錄web應用運行中出現的錯誤 2> flask.app 給開發者預留的日志 # flask中的運行錯誤也會記錄到flask.app的日志中 def create_logger(): """配置flask日志""" # 創建flask.app日志器 flask_logger = logging.getLogger('flask.app') # 設置全局級別 flask_logger.setLevel('DEBUG') # 創建控制台處理器 console_handler = logging.StreamHandler() # 給處理器設置輸出格式 console_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s') console_handler.setFormatter(console_formatter) # 日志器添加處理器 flask_logger.addHandler(console_handler) # 創建文件處理器 file_handler = RotatingFileHandler(filename='flask.log', maxBytes=100 * 1024 * 1024, backupCount=10) # 轉存文件處理器 當達到限定的文件大小時, 可以將日志轉存到其他文件中 # 給處理器設置輸出格式 file_formatter = RequestFormatter(fmt='[%(asctime)s] %(remote_addr)s requested %(url)s %(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s') file_handler.setFormatter(file_formatter) # 單獨設置文件處理器的日志級別 file_handler.setLevel('WARN') # 日志器添加處理器 flask_logger.addHandler(file_handler) @app.route('/') def index(): # num = 1 / 0 app.logger.error('this is a error') return "index" if __name__ == '__main__': create_logger() app.run(debug=True)

自定義日志信息

項目中配置日志

  • 在 家目錄中手動創建log文件夾
# 查看最新的⽇日志 tail flask.log # 默認查看最新的10⾏行行⽇日志 tail -n 100 flask.log # 默認查看最新的100⾏行行⽇日志 tail -f flask.log # 動態監聽⽇日志




免責聲明!

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



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