2012-06-13 169 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