Flask缓存多个项目文件

11

我对Flask比较新。我的flask项目中有多个文件。到目前为止,如果我想从app.py文件之外访问app对象,我一直在使用current_app

现在我正在尝试使用flask-caching扩展程序向我的应用添加缓存。我在app.py中初始化它。

from flask_caching import Cache
...
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

然而我在使用它与views.py文件时遇到了麻烦。

我有一个资源类:

class MyEndpoint(Resource):
    def get(self):
        do_stuff_here

我不知道如何获得缓存对象以实现这个目标:

class MyEndpoint(Resource):
    @cache.cached(timeout=600)
    def get(self):
        do_stuff_here

我尝试执行:

  • from app import cache -> ImportError: 无法导入名称 'cache'
  • @current_app.cache.cached -> RuntimeError: 工作在应用上下文之外。

我的项目结构的一部分:

|
-app.py
|
--api
  |
  -__init__.py
  -views.py

你能展示一下 app.pyviews.pyimports 吗? - Danila Ganchar
@Quba,请问你介意分享一下你是如何解决这个问题的吗? - MarcioPorto
@MarcioPorto 当然,我会在几个小时内完成。 - Quba
@Quba,我还没有解决这个问题。你能给我一些指导,告诉我如何完成吗? - MarcioPorto
@MarcioPorto,我刚刚发布了一个答案。 - Quba
2个回答

26

我搞定了。 只需在不同的文件中初始化Cache对象:

common/extensions.py:

from flask_caching import Cache

cache = Cache() 

然后在 app.py 中:

from common.extensions import cache
app = Flask(__name__)
cache.init_app(app, config={'CACHE_TYPE': 'simple'})

你是救命恩人 @Quba。非常感谢! - MarcioPorto
未解决的引用“Cache”。如何安装Cache? - Vigneswaran A
对我来说也是救命稻草。哈哈 - Yan Yang

0

我曾经遇到过同样的问题,原因是在创建缓存对象之前注册了我的应用程序模块。这会创建一个循环依赖,其中模块代码尝试在创建缓存之前加载缓存。

在初始化缓存后,在flask应用程序中注册您的模块。然后,在您的模块内使用from app import cache应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接