4

プロジェクトのために Django から Flask に切り替えましたが、Django のような同様の構造をセットアップする方法が少しわかりません。

私のフラスコの例では、すべてが単一のファイルで正常に機能しますが、モデルを独自のクラスに取り込もうとした瞬間に、相互参照の問題が発生し、解決できません。

F11.py

app = Flask(__name__)
db = SQLAlchemy(app)

...

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

models.py

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String)

問題はすでにここから始まりますdb.ModeldbmainF11.pyでインスタンス化されているので、どうすればアクセスできますか? インポートしただけでは、相互参照エラーが発生します。

4

2 に答える 2

2

import app一般に、どのファイルにも必要のない方法でアプリケーションを構成するのが好きです。私の現在のプロジェクトでは、アプリをインポートする唯一のファイルは、manage.pyFlask-Script を使用して特定のことを実行できるようにするだけのファイルです。

多くの Flask 拡張機能に備わっている優れた機能はinit_appメソッドです。これにより、アプリ オブジェクトを必要とせずに、アプリの拡張機能をインスタンス化できます。

dbというファイルで というデータベースをセットアップしたとしますdb.py。これは次のように見えるかもしれません

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

でアプリをセットアップしたとしましょう__init__.py。このファイルは次のようになります

from flask import Flask
from app.db import db

app = Flask(__name__)
db.init_app(app)

# ...

これで、Flask アプリケーション用にデータベースが初期化されました。from app.db import dbたとえば、models.py.

私の見解では、@app.route('/')メソッドを使用する代わりにブループリントに戻ることがよくあります。データベースと同様に、ブループリントは__init__.pyファイルにインポートしてアプリに登録するだけです。

于 2013-06-03T22:16:55.130 に答える