我为我当前的Flask项目构建了一个简单的权限系统,我想将其分解为一个扩展,以便我可以共享它并在其他项目中使用它。我正在努力获取用户的SQLAlchemy数据库连接,以便在我的扩展中使用。
具体来说,我想在数据库中为使用我的扩展程序的任何人创建一些模型。我确信有这样做的模式,但我不知道。
我在这里添加了一些更多信息http://bit.ly/1dqubJQ
答案 0 :(得分:3)
我喜欢这种问题的模式是没有扩展定义数据库模型,而是提供开发人员可以从中继承模型的mixin类。除了mixin之外,您还可以为数据库中的加载或保存模型等操作提供回调函数,也可由应用程序开发人员提供。
例如,Flask-Login使用此技术。我喜欢它,因为它使扩展数据库不可知。您说您有兴趣为SQLAlchemy执行此操作,但如果您发布扩展名,则某人可能希望将其用于Mongo或Peewee或没有ORM层。如果您不对扩展中的数据库引擎做任何假设,那么所有这些都将得到支持。
答案 1 :(得分: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)