Các flask_sqlalchemy
mô-đun không cần phải được khởi tạo với các ứng dụng ngay lập tức - bạn có thể làm điều này thay vì:
# apps.members.models
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Member(db.Model):
# fields here
pass
Và sau đó trong thiết lập ứng dụng của mình, bạn có thể gọi init_app
:
# apps.application.py
from flask import Flask
from apps.members.models import db
app = Flask(__name__)
# later on
db.init_app(app)
Bằng cách này, bạn có thể tránh nhập hàng theo chu kỳ.
Mẫu này không bắt buộc bạn phải đặt tất cả các mẫu của mình trong một tệp. Chỉ cần nhập db
biến vào từng mô-đun mô hình của bạn.
Thí dụ
# apps.shared.models
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# apps.members.models
from apps.shared.models import db
class Member(db.Model):
# TODO: Implement this.
pass
# apps.reporting.members
from flask import render_template
from apps.members.models import Member
def report_on_members():
# TODO: Actually use arguments
members = Member.filter(1==1).all()
return render_template("report.html", members=members)
# apps.reporting.routes
from flask import Blueprint
from apps.reporting.members import report_on_members
reporting = Blueprint("reporting", __name__)
reporting.route("/member-report", methods=["GET","POST"])(report_on_members)
# apps.application
from flask import Flask
from apps.shared import db
from apps.reporting.routes import reporting
app = Flask(__name__)
db.init_app(app)
app.register_blueprint(reporting)
Lưu ý: đây là bản phác thảo về một số sức mạnh mà điều này mang lại cho bạn - rõ ràng là bạn có thể làm được nhiều việc hơn nữa để phát triển dễ dàng hơn (sử dụng create_app
mẫu, tự động đăng ký bản thiết kế trong một số thư mục nhất định, v.v.)