Flask 上下文用法

2021-08-10 17:56 更新

上下文的一個典型應(yīng)用場景就是用來緩存一些我們需要在發(fā)生請求之前或者要使用的 資源。舉個例子,比如數(shù)據(jù)庫連接。當(dāng)我們在應(yīng)用上下文中來存儲東西的時候你 得選擇一個唯一的名字,這是因為應(yīng)用上下文為 Flask 應(yīng)用和擴展所共享。

最常見的應(yīng)用就是把資源的管理分成如下兩個部分:

  1. 一個緩存在上下文中的隱式資源
  2. 當(dāng)上下文被銷毀時重新分配基礎(chǔ)資源

通常來講,這將會有一個 get_X() 函數(shù)來創(chuàng)建資源 X ,如果它還不存在的話。 存在的話就直接返回它。另外還會有一個 teardown_X() 的回調(diào)函數(shù)用于銷毀資源 X 。

如下是我們剛剛提到的連接數(shù)據(jù)庫的例子:

import sqlite3
from flask import g

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = connect_to_database()
    return db

@app.teardown_appcontext
def teardown_db(exception):
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()

當(dāng) get_db() 這個函數(shù)第一次被調(diào)用的時候數(shù)據(jù)庫連接已經(jīng)被建立了。 為了使得看起來更隱式一點我們可以使用 LocalProxy 這 個類:

from werkzeug.local import LocalProxy db = LocalProxy(get_db)

這樣的話用戶就可以直接通過訪問 db 來獲取數(shù)據(jù)句柄了, db 已經(jīng)在內(nèi)部完 成了對 get_db() 的調(diào)用。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號