2017-01-03 5 views
2

私はいくつかのデータの分析を行い、そのデータに基づいてグラフを描くフラスコアプリケーションを持っています。しかし今までは、私のindex.pyファイルのグラフの解析と描画をindexメソッドで行ってきました。これはブラウザで「リフレッシュ」を実行するたびに解析全体をやり直し、グラフ全体を描画するので、あまり良くありません。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モジュールに自分のデータ分析を移動すると考えますリフレッシュする度に私が実行したハードルは、実際に私のviews.pyモジュールに必要なデータを__init__.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 

は、これを行うための別の、多分より適切な方法はありますか?

EDIT:

私はすべての私のデータ分析を行っておりますする(data_analysis.py)それはモジュールを作成することで作業を取得するために管理してきました。

from app import data_analysis 

今、私にできること:

GPSVALUES = data_analysis.VALUES 
#do something with the values.. 

それはしかしように見えるんまた、これは私の__init__.pyに私は私のデータ分析を削除したと私は今、代わりに私のview.pyに次のように持っていることを意味しスクリプトを2回実行してください。最初に私のrun.pyのスタートアップ時。そして、最初のリクエストがに来ると再び。 run.pyの起動時にのみスクリプトが実行されているようです。また、ページが更新されても、最初に欲しかったスクリプトは再実行されません。そこで私は、私は他のソリューションが登場していない限り、このソリューションで行くつもりだと思います。

+0

あなたの前提は欠陥があります。 '__init__'にはコードが1回だけ実行されるということは何もありません。 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は変数であり、モジュール/関数ではないため失敗します。うーん...何VALUESモジュールが存在しない、ので

import VALUES 

は失敗します。

+0

悲しいことに、うまくいきません。私は 'ImportErrorを取得します: '__init __'' – Zeliax

1

これはうまくいくかもしれない、

from app import VALUES 

を試してみてください。

あなたは、あなたのアプリケーション内で一度だけデータ分析を行い、これらのフラスコデコレータの読み取りを与えたい場合は

+0

'from app import VALUES'は動作しないようです。どのように私はこれらの2つのデコレータを使用して行くだろう、私はいくつかの検索を行ったが、実際に例を見つけることはできません。 – Zeliax

+0

'import'にはどのようなエラーがありますか?それらのデコレータについては、関数宣言の上に' @ app.before_first_request'を追加してください。これを追加すると、アプリケーションに最初に要求された要求を処理する前に関数を1回呼び出すことになります。そのように装飾された関数は何も返すことができないことに注意してください。 – franklinsijo

+0

'ImportError:名前 'GPSVALUES'をインポートできません(複数の値を使用するように名前を変更しました)。 – Zeliax

関連する問題