2012-06-13 217 views
9

我想創建一個藍圖;這與我目前的藍圖沒有關係。我可以做這個。在燒瓶藍圖中使用燒瓶擴展

但是,說我想用的燒瓶延伸在我的應用程序(我來說,我要整合瓶高速緩存)?

一切我迄今所做的已經出錯:

  • 緩存=緩存(my_blueprint)

  • 在不同的僞裝

所以進口緩存和緩存的各個部分像燒瓶緩存的東西很簡單,可以環繞我的應用程序:

from flask.ext.cache import Cache 
cache = Cache(app) 

但在藍圖中使用或使用藍圖我不太明白現在如何。

編輯:不太明顯的解決方案是從擴展到嬰兒牀,並建立自己的庫導入到的藍圖,但它更多的工作,我尚未大功告成。擴展/藍圖似乎不符合我現在的理解水平。

回答

32

爲了避免你將要創建的緩存實例從您的應用程序實例分開的圓形進口(你可能要考慮,如果你正在構建更復雜的東西切換到應用工廠模塊)。

cache.py

from flask_cache import Cache 

cache = Cache() 

foo.py

from flask import Blueprint 
from cache import cache 

mod = Blueprint(...) 

@mod.route("/") 
@cache.cached(timeout=50) 
def index(): 
    return datetime.now().strfmtime("%Y-%m-%d %H:%M:%S") 

app.py

from flask import Flask 
from yourapp.cache import cache 
from yourapp.foo import mod 

app = Flask("yourapp") 

# ... snip ... 

cache.init_app(app) 

# ... snip ... 

app.register_blueprint(mod) 
+0

我很接近這個,但並不完全在我的努力中。 – blueblank

+3

使用藍圖和CACHE_TYPE ='文件系統'只能與cache.init_app(應用程序,配置=應用程序配置) –

+0

我只是不能使用像你建議的打印時間,並且此代碼爲我運行。進口日期時間現在= datetime.datetime.now()小時= now.hour 分鐘= now.minute 秒= now.second \t打印「,這是高速緩存時間:%S-%S-%S 「%(小時,分鐘,秒) – gacon

0

的應用程序需要訪問的唯一的事情是app -instance創建cache

讓我們假設你的代碼:cache = Cache(app)foo.py。但是你想使用bar.py中的緩存,它使用藍圖來註冊路由。

foo.py:

from flask.ext.cache import Cache 
cache = Cache(app) 

from bar import mod 
app.register_blueprint(mod) 

你有bar.py做的唯一的事情是進口從foo.pycache並使用它:

bar.py:

from foo import chache 

mod = Blueprint(...) 


@mod.route('/') 
@cache.cached(timeout=50) 
def index(): 
    return str(datetime.now()) 

Flask Cache DocsExamples

編輯:上面的例子有一個問題,circiular進口。去這裏的路是分開的高速緩存中的應用:

包/ __ 初始化 __.py:

app = Flask(__name__) 

from pack.views.general import mod 
app.register_blueprint(mod) 

包/ cache.py:

from flask.ext.cache import Cache 

from pack import app 

cache = Cache(app) 

pack/views/general。潘岳:

from flask import Blueprint 
from pack.chache import chache 

mod = Blueprint(...) 


@mod.route('/') 
@cache.cached(timeout=50) 
def index(): 
    return str(datetime.now()) 
+0

我嘗試這樣第一,但收到的錯誤;並再次嘗試 - 這是一個循環進口。 – blueblank

+0

@blueblank:你是在藍圖文件中導入應用程序,還是從Flask導入current_app使用? – 2012-06-14 09:43:44

+0

是的,我沒有想到,對此感到抱歉。通常我有一個帶'__init __。py'的模塊,其中包含應用程序和'view'文件夾中的'view-functions'。但我認爲你有這個想法。 – dav1d