在烧瓶蓝图中使用烧瓶扩展

blu*_*ank 12 python flask

我想创建一个蓝图; 我当前的蓝图不是问题.我可以做这个.

但是,我想在我的应用程序中使用烧瓶扩展(对于我的情况,我想集成flask-Cache)?

到目前为止我所做的一切都有错误:

  • cache = Cache(my_blueprint)

  • 以不同的形式导入Cache和Cache的各个部分

所以像flask-cache这样的东西很简单,可以包裹我的app:

from flask.ext.cache import Cache
cache = Cache(app)
Run Code Online (Sandbox Code Playgroud)

但是在蓝图中使用它或使用蓝图我现在还不太明白.

编辑:不太明显的解决方案是从扩展程序中删除并构建我自己的库以导入蓝图,但这是更多的工作,我还没有完成.扩展/蓝图似乎与我现在的理解水平不兼容.

Sea*_*ira 42

为了避免循环导入,您需要创建与应用程序实例分开的缓存实例(如果要构建更复杂的东西,可能需要考虑切换到应用工厂模块).

cache.py

from flask_cache import Cache

cache = Cache()
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

  • 使用蓝图和CACHE_TYPE ='filesystem'仅适用于cache.init_app(app,config = app.config) (3认同)