我有一个烧瓶应用程序,我在这里做一些数据的分析,并根据这些数据绘制一些图。但是直到现在,我一直在我的view.py文件中执行分析和绘制图形,在我的索引方法中。这不是很好,因为每次我在浏览器中执行“刷新”时,都会重做整个分析并绘制所有图形。是否可以从views_py中的__init__.py导入变量?
我的项目结构如下:
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中运行它,它并不能真正解决我的问题。 – Zeliax
是的,如果你在模块级运行它。 –