2017-01-03 55 views
2

我有一個燒瓶應用程序,我在這裏做一些數據的分析,並根據這些數據繪製一些圖。但是直到現在,我一直在我的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時運行腳本。如果頁面被刷新,它不會重新運行我首先想要的腳本。因此,我想我會用此溶液去除非沒有其他的解決方案的用武之地。(我會盡快添加一個答案,因爲我已經做了一些更多的測試)

+0

你的前提是有缺陷的。 '__init__'中的代碼沒有任何意義,這意味着它只能運行一次;您可以通過將其設置爲views.py中的模塊級別來獲得相同的效果。 –

+0

如果我要在與我的views.py相同的文件夾級別創建用於我的數據分析的輔助模塊,則需要在某處運行它。如果我在我的views.py中運行它,它並不能真正解決我的問題。 – Zeliax

+0

是的,如果你在模塊級運行它。 –

回答

1

嘗試

import __init__ 
VALUES = __init__.VALUES 

from app import app, models, __init__ 

失敗,因爲如果它不在您的範圍內,則不能從app導入。

from __init__ import VALUES 

失敗,因爲VAULES是一個變量而不是一個模塊/功能。

import VALUES 

失敗,因爲......沒有VALUES模塊。

+0

可悲的是不工作。我得到'ImportError:沒有名爲'__init __'的模塊' – Zeliax

1

嘗試,

from app import VALUES 

這可能會實現。

如果你想在你的應用程序執行數據分析只有一次,給讀這些燒瓶裝飾,

+0

'from app import VALUES'似乎也不起作用。我將如何去使用這兩個裝飾器,我已經做了一些搜索,但無法找到任何示例。 – Zeliax

+0

你爲'import'得到了什麼錯誤?..對於這些裝飾器,在函數聲明上添加'@ app.before_first_request'。在處理髮送給應用程序的第一個請求之前,添加它會調用一次函數。請注意,這樣裝飾的功能不能返回任何東西。 – franklinsijo

+0

'ImportError:無法導入名稱'GPSVALUES''(我已將其重命名爲使用多種類型的值)。 – Zeliax

相關問題