0

フラスコアプリがあります。

app.py

app = Flask(__name__)

from views import *

if __name__=="__main__":
    app.run()

ビュー.py

from app import app

@app.route('/')
def home():
    return "Homepage"

したがって、ここでは、で定義されているすべてのフォームとビューが必要とするapp.pyものをインポートしています。しかし、それでも循環インポートは発生しません。なんで?views.pyappapp.py

以下を使用してこのアプリケーションを実行します。

python app.py
4

2 に答える 2

4

これは、アプリの作成時に Flask で実行できるLarger Applicationsドキュメントに似ています。

ドキュメントから:

循環輸入

すべての Python プログラマーはそれらを嫌っていますが、循環インポートをいくつか追加しました (これは、2 つのモジュールが互いに依存している場合です。この場合views.pyは に依存しています__init__.py)。これは一般的には悪い考えですが、ここでは実際には問題ありません。この理由は、実際にはビューを使用しておらず__init__.py、モジュールがインポートされていることを確認しており、ファイルの下部でそれを行っているためです。

于 2013-05-06T14:14:02.330 に答える
0

プログラムの動作に従おうとすると、次のようになります。

app = Flask(__name__) # OK
from views import * # Goes into views.py

from app import app # Looks into app.py, finds it, import it

# Defines home
@app.route('/')
def home():
    return "Homepage"

# import home and app, overriding app in app.py
# But views.app is the same as app.app, so it is still
# the same object

# Run main
if __name__=="__main__":
    app.run()

みたいな計算をしているに違いない。アプリはインポート前に定義されているので大丈夫です。

于 2013-05-06T14:14:45.847 に答える