W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在上面的例子中,在每個(gè)請求之前,一個(gè) sqlite3_db 被分配到 _app_ctx_stack.top 。在一個(gè)視圖函數(shù)中,這個(gè)變量可以使用 SQLite3 的屬性 connection 來訪問。在請求銷毀時(shí), sqlite3_db 連接被關(guān)閉。 通過使用這個(gè)模式, 相同 的 sqlite3 數(shù)據(jù)庫連接在請求期間對任何需要它的東 西都是可訪問的。
如果 _app_ctx_stack 因?yàn)橛脩羰褂昧死习姹镜?Flask 不存在, 建議退化到限定在請求中的 _request_ctx_stack 。
這只在你想要支持 Flask 0.6 和更老版本時(shí)有關(guān)
由于在 Flask 0.7 中關(guān)于在請求的最后運(yùn)行的函數(shù)的變更,你的應(yīng)用需要在此格外 小心,如果要繼續(xù)支持 Flask 的更老版本。下面的模式是一個(gè)兼顧新舊的好方法:
def close_connection(response):
ctx = _request_ctx_stack.top
ctx.sqlite3_db.close()
return response
if hasattr(app, 'teardown_request'):
app.teardown_request(close_connection)
else:
app.after_request(close_connection)
嚴(yán)格地講,上面的代碼是錯(cuò)誤的,因?yàn)殇N毀函數(shù)接受異常且典型地不返回任何東西。 盡管如此,因?yàn)榉祷刂当粊G棄,這剛好會(huì)工作,假設(shè)中間的代碼不觸碰傳遞的參數(shù)。
本文檔只接觸了擴(kuò)展開發(fā)中絕對的最小部分,如果你想要了解更多,一個(gè)非常好的 主意是查看 Flask Extension Registry 上已有的擴(kuò)展。如果你感到失落,也有 郵件列表 和 IRC 頻道 來獲取一些漂亮 API 的想法。特別是當(dāng)你在做之前 沒人做過的東西,這會(huì)是一個(gè)非常好的主意來獲得更多投入。這不僅獲得人們會(huì)想 從擴(kuò)展中得到什么的想法,也可避免多個(gè)開發(fā)者重復(fù)發(fā)明輪子。
記?。毫己玫?API 設(shè)計(jì)是困難的,所以請?jiān)卩]件列表里介紹你的項(xiàng)目,讓 其它開發(fā)者在 API 設(shè)計(jì)上助你一臂之力。
最好的 Flask 擴(kuò)展是那些為 API 共享通用風(fēng)格的擴(kuò)展,并且這只在起初就協(xié)作時(shí) 奏效。
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)系方式:
更多建議: