Flask 實(shí)例文件夾

2021-08-10 17:48 更新

0.8 新版功能.

Flask 0.8 引入了示例文件夾。 Flask 在很長(zhǎng)時(shí)間使得直接引用相對(duì)應(yīng)用文件夾 的路徑成為可能(通過(guò) Flask.root_path )。這也是許多開(kāi)發(fā)者加載存儲(chǔ) 在載入應(yīng)用旁邊的配置的方法。不幸的是,這只會(huì)在應(yīng)用不是包,即根路徑指向包 內(nèi)容的情況下才能工作。

在 Flask 0.8 中,引入了 Flask.instance_path 并提出了“實(shí)例文件夾” 的新概念。實(shí)例文件夾被為不使用版本控制和特定的部署而設(shè)計(jì)。這是放置運(yùn)行時(shí) 更改的文件和配置文件的最佳位置。

你可以在創(chuàng)建 Flask 應(yīng)用時(shí)顯式地提供實(shí)例文件夾的路徑,也可以讓 Flask 自 動(dòng)找到它。對(duì)于顯式的配置,使用 instance_path 參數(shù):

app = Flask(__name__, instance_path='/path/to/instance/folder')

請(qǐng)注意給出的 一定 是絕對(duì)路徑。

如果 instance_path 參數(shù)沒(méi)有賦值,會(huì)使用下面默認(rèn)的位置:

  • 未安裝的模塊:

    /myapp.py
    /instance
    
  • 未安裝的包:

    /myapp
        /__init__.py
    /instance
    
  • 已安裝的包或模塊:

    $PREFIX/lib/python2.X/site-packages/myapp
    $PREFIX/var/myapp-instance
    

    $PREFIX 是你 Python 安裝的前綴。這個(gè)前綴可以是 /usr 或者你的 virtualenv 的路徑。你可以打印 sys.prefix 的值來(lái)查看前綴被設(shè)置成 了什么。

既然配置對(duì)象提供從相對(duì)文件名來(lái)載入配置的方式,那么我們也使得它從相對(duì)實(shí)例 路徑的文件名加載成為可能,如果你想這樣做。配置文件中的相對(duì)路徑的行為可以 在“相對(duì)應(yīng)用的根目錄”(默認(rèn))和 “相對(duì)實(shí)例文件夾”中切換,后者通過(guò)應(yīng)用構(gòu)造函 數(shù)的 instance_relative_config 開(kāi)關(guān)實(shí)現(xiàn):

app = Flask(__name__, instance_relative_config=True)

這里有一個(gè)配置 Flask 來(lái)從模塊預(yù)載入配置并覆蓋配置文件夾中配置文件(如果 存在)的完整例子:

app = Flask(__name__, instance_relative_config=True)
app.config.from_object('yourapplication.default_settings')
app.config.from_pyfile('application.cfg', silent=True)

實(shí)例文件夾的路徑可以在 Flask.instance_path 找到。 Flask 也提供了 一個(gè)打開(kāi)實(shí)例文件夾中文件的捷徑,就是 Flask.open_instance_resource() 。

兩者的使用示例:

filename = os.path.join(app.instance_path, 'application.cfg')
with open(filename) as f:
    config = f.read()

# or via open_instance_resource:
with app.open_instance_resource('application.cfg') as f:
    config = f.read()
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)