99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Flask 上下文用法

2021-08-10 17:56 更新

上下文的一個(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è)部分:

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

通常來(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)用。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)