flask-cache在blueprint / app工厂中导致名称错误

时间:2014-06-02 18:41:28

标签: python caching flask

目前,我有一个应用程序工厂,如下所示:

from flask import Flask
from flask.ext.bootstrap import Bootstrap
from flask.ext.cache import Cache
from config import config

bootstrap = Bootstrap()
cache = Cache(config={'CACHE_TYPE': 'simple'})

def create_app(environment):
  app = Flask(__name__)
  app.config.from_object(config[environment])

  bootstrap.init_app(app)
  cache.init_app(app)

  from main import main as base_blueprint
  from charts.statistics import statistics
  app.register_blueprint(base_blueprint)
  app.register_blueprint(statistics, url_prefix='/statistics')

  return app

遵循这种模式,我有我的统计蓝图。 __init__.py目录中的charts/如下:

from flask import Blueprint
statistics = Blueprint('statistics', __name__)
from . import statistics_charts

... statistics_charts.py只有以下内容

@statistics.route('/summary_chart')
@cache.memoize(timeout=5000)
def summary_chart():
  # ...
  return jsonify(my_data)

然而,当我尝试运行它时,它经常给我一个名称错误,说从未定义缓存。这适用于其他应用程序,它们只是一个文件,但似乎不适用于应用程序工厂和蓝图样式。

缓存在蓝图中必须做些什么?

2 个答案:

答案 0 :(得分:1)

将两条cache行移至statistics_charts.py文件。然后它会抱怨statistics没有被定义,但这是一个简单的解决方法。

答案 1 :(得分:1)

您需要将以下import语句添加到蓝图的顶部。

from . import cache