W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
上下文的一個(gè)典型應(yīng)用場(chǎng)景就是用來(lái)緩存一些我們需要在發(fā)生請(qǐng)求之前或者要使用的 資源。舉個(gè)例子,比如數(shù)據(jù)庫(kù)連接。當(dāng)我們?cè)趹?yīng)用上下文中來(lái)存儲(chǔ)東西的時(shí)候你 得選擇一個(gè)唯一的名字,這是因?yàn)閼?yīng)用上下文為 Flask 應(yīng)用和擴(kuò)展所共享。
最常見的應(yīng)用就是把資源的管理分成如下兩個(gè)部分:
通常來(lái)講,這將會(huì)有一個(gè) get_X() 函數(shù)來(lái)創(chuàng)建資源 X ,如果它還不存在的話。 存在的話就直接返回它。另外還會(huì)有一個(gè) teardown_X() 的回調(diào)函數(shù)用于銷毀資源 X 。
如下是我們剛剛提到的連接數(shù)據(jù)庫(kù)的例子:
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() 這個(gè)函數(shù)第一次被調(diào)用的時(shí)候數(shù)據(jù)庫(kù)連接已經(jīng)被建立了。 為了使得看起來(lái)更隱式一點(diǎn)我們可以使用 LocalProxy 這 個(gè)類:
from werkzeug.local import LocalProxy db = LocalProxy(get_db)
這樣的話用戶就可以直接通過(guò)訪問(wèn) db 來(lái)獲取數(shù)據(jù)句柄了, db 已經(jīng)在內(nèi)部完 成了對(duì) get_db() 的調(diào)用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: