4

我为我当前的 Flask 项目构建了一个简单的权限系统,我想将它分解为一个扩展,以便我可以共享它并在其他项目中使用它。我正在为如何获取用户的 SQLAlchemy 数据库连接以在我的扩展程序中使用而苦苦挣扎。

具体来说,我想在数据库中为使用我的扩展的任何人创建一些模型。我确定有这样做的模式,但我不知道。

我在这里提供了更多信息http://bit.ly/1dqubJQ

4

2 回答 2

3

对于此类问题,我喜欢的一种模式是不让扩展定义数据库模型,而是提供开发人员可以从中继承模型的 mixin 类。除了 mixin(s) 之外,您还可以为从数据库加载或保存模型等操作提供回调函数,这也由应用程序开发人员提供。

例如,这种技术被Flask-Login使用。我喜欢它,因为它使扩展数据库不可知。你说你有兴趣为 SQLAlchemy 做这件事,但是如果你发布你的扩展,有人会想在某个时候将它与 Mongo、Peewee 或没有 ORM 层一起使用。如果您对扩展中的数据库引擎不做任何假设,所有这些都将得到支持。

于 2013-08-28T18:13:03.550 回答
2

您只是希望用户能够在您的扩展程序中使用他们的 sqlalchemy 连接,对吗?为什么不把它放在 init 中?

class FlaskExtension(object):

    # db below is the user's sqlalchemy connection
    def __init__(self, app=None, db=None):
        self.app = app
        self.db = db
        if app is not None and db is not None:
            self.init_app(app,db)
于 2013-08-28T17:47:09.310 回答