我有一个 flask 应用程序,我在其中对一些数据进行了一些分析,并根据该数据绘制了一些图表。然而,到目前为止,我一直在我的 views.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 模块中需要的数据。
这是怎么做到的?
我试过以下方法:
__初始化__.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()
View .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
时才运行脚本。如果刷新页面,它不会重新运行脚本,这正是我首先想要的。因此,我认为除非没有其他解决方案出现,否则我将采用此解决方案。(我会在完成更多测试后立即添加答案)
最佳答案
尝试
import __init__
VALUES = __init__.VALUES
from app import app, models, __init__
失败,因为如果 app
不在您的范围内,您将无法导入。
from __init__ import VALUES
失败,因为 VAULES
是一个变量而不是模块/函数。
import VALUES
失败是因为……没有VALUES
模块。
关于python - 是否可以从 views.py 中的 __init__.py 导入变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446241/