我相信最真实的答案是模块化蓝图不应该直接与数据访问相关,而应该依赖于提供兼容实现的应用程序。
因此,给出你的示例蓝图。
from flask import current_app, Blueprint, render_templateflat_pages = Blueprint('flat_pages', __name__, template_folder='templates')@flat_pages.recorddef record(state): db = state.app.config.get("flat_pages.db") if db is None: raise Exception("This blueprint expects you to provide " "database access through flat_pages.db")@flat_pages.route('/<page>')def show(page): db = current_app.config["flat_pages.db"] page_object = db.find_page_by_name(page) return render_template('pages/{}.html'.format(page), page=page_object)
因此,没有什么可以阻止你提供默认实现的。
def setup_default_flat_pages_db(db): class Page(db.Model): name = db.Column(db.String(255), primary_key=True) title = db.Column(db.String(255)) content = db.Column(db.String(255)) def __init__(self, name, title, content): self.name = name self.title = title self.content = content class FlatPagesDBO(object): def find_page_by_name(self, name): return Page.query.filter_by(name=name).first() return FlatPagesDBO()
并在你的配置中。
app.config["flat_pages.db"] = setup_default_flat_pages_db(db)
通过不依赖于db.Model的直接继承,可以使上述内容更简洁,而仅使用来自sqlalchemy的vanilla declarative_base,但这应该代表了它的要旨。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)