首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用flask_restful和flask_caching循环导入

使用flask_restful和flask_caching循环导入
EN

Stack Overflow用户
提问于 2020-02-10 14:14:34
回答 1查看 721关注 0票数 2

我在我的项目中使用flask_restful已经有一段时间了,因为我喜欢将我的资源划分到不同的文件中,以便进行基本的组织。现在我想添加flask_caching,但我遇到了一个(简单?)循环导入问题

我的项目结构是这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flask_api.py
-resources
--my_resource.py
--my_other_resource.py
--so_many_more_resources.py

my_resources.py的端点被添加到flask_api.py中,我也在其中创建了flask_cache缓存对象,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# flask_api.py
from flask import Flask
from flask_restful import Api
from flask_caching import Cache
from resources import my_resource
app = Flask(__name__)
cache = Cache(app, config={'sample config'})
api = Api(app)
api.add_resource(my_resource.GetStuff, '/api/v2/stuff/get')
# this file also runs the app

然后,我(尝试)将缓存导入到my_resource.py中-在那里我使用了@cache装饰器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# resources/my_resource.py
from flask_api import cache
class GetStuff(Resource):
    @cache.memoize(timeout=30)
    def get():
        return "Stuff"

但这导致了可怕的循环导入问题。我可以将我所有的资源导入夹在api.add_resource()之上的cache = Cache(...)行之下。然而,这感觉像是一种刺鼻的代码气味,并使一个非常,非常肉质的三明治。我更愿意把它们都放在文件的顶部。

解决这个问题的正确方法是什么?(希望不用修改代码库的大部分内容)

tl;dr: flask_api创建缓存并导入资源->资源无法从flask_api导入缓存

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 11:58:43

好的,简单的解决方法是将缓存生成移动到资源文件夹中的__init__.py文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flask_api.py
-resources
--__init__.py
--my_resource.py
--my_other_resource.py
--so_many_more_resources.py

并在不使用"app“参数的情况下启动缓存,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# __init__.py
cache = Cache(config={'...'})

然后,flask_api.py可以导入它并执行cache.init_app(app)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# flask_api.py
from resources import cache
cache.init_app(app)

资源也可以从__init__.py导入缓存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# my_resource.py
from . import cache
class GetStuff(Resource):
    @cache.memoize(timeout=30)
    def get():
        return "Stuff"

这不会导致我的flask应用程序发生大量的结构变化,并且允许我将资源导入到flask_api中,而不需要在应用程序生成后将它们夹在中间,以避免循环导入。

我希望这对其他遇到类似问题的人有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60152274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文