【发布时间】:2017-05-17 16:57:17
【问题描述】:
我有一个烧瓶应用程序,我在其中对一些数据进行了一些分析,并根据这些数据绘制了一些图表。然而,到目前为止,我一直在我的 views.py 文件中的 index 方法中执行图形的分析和绘制。这不是很好,因为每次我在浏览器中执行“刷新”时,它都会重做整个分析并重新绘制图表。
我的项目结构如下:
Data Analysis/
- app/
- static/
- templates/
- base.html
- index.html
- __init__.py
- models.py
- views.py
- venv/
- run.py
- config.py
我想将我的数据分析移至我的 __init__.py 模块,因为这将导致仅在应用程序运行后计算所需的数据,而不是在每次刷新时重新运行它。我遇到的障碍实际上是从我的 __init__.py 模块中导入我需要的数据到我的 views.py 模块中。
这是怎么做到的?
我尝试了以下方法:
__init__.py
from flask import Flask, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
def do_data_analysis():
#... lots of calculations
return data
VALUES = do_data_analysis()
views.py
from app import app, models, __init__ #does not work
from __init__ import VALUES #does not work
import VALUES #does not work
from app import VALUES # does not work
VALUES = __init__.VALUES #does not work
是否有另一种可能更合适的方法来做到这一点?
编辑:
我已经设法通过创建一个模块 (data_analysis.py) 使其工作,我在其中执行所有数据分析。这也意味着在我的__init__.py 中我删除了我的数据分析,而我现在在我的view.py 中有以下内容:
from app import data_analysis
现在我可以做:
GPSVALUES = data_analysis.VALUES
#do something with the values..
然而,它似乎确实运行了两次脚本。首先在我的。它似乎只在启动run.py 启动时。然后在第一个请求进来时再次run.py 时运行脚本。如果页面被刷新,它不会重新运行我最初想要的脚本。因此,除非没有其他解决方案,否则我认为我会采用此解决方案。(我会在完成更多测试后立即添加答案)
【问题讨论】:
-
你的前提是有缺陷的。在
__init__中没有代码,这意味着它只会运行一次;您可以通过将其放在 views.py 中的模块级别来获得相同的效果。 -
如果我要在与我的views.py 相同的文件夹级别中为我的数据分析创建一个辅助模块,我需要在某个地方运行它。如果我要在我的views.py 中运行它,它并不能真正解决我的问题。
-
是的,如果您在模块级别运行它。
-
你将不得不解释这意味着什么......或者至少指出我可以找到解决方案的地方
标签: python flask import module python-3.5