Python 我应该如何创建一个依赖于另一个扩展的烧瓶扩展?
我想创建一个烧瓶扩展,它依赖于另一个烧瓶扩展。为了便于讨论,假设它是Flask Foo,需要Flask Redis在Redis数据库中存储一些特定的数据 我知道我可以向Flask Redis添加安装依赖项。然而,我不明白我应该如何实例化和初始化Flask RedisPython 我应该如何创建一个依赖于另一个扩展的烧瓶扩展?,python,flask,Python,Flask,我想创建一个烧瓶扩展,它依赖于另一个烧瓶扩展。为了便于讨论,假设它是Flask Foo,需要Flask Redis在Redis数据库中存储一些特定的数据 我知道我可以向Flask Redis添加安装依赖项。然而,我不明白我应该如何实例化和初始化Flask Redis Flask Foo的设置设置Flask Redis对象。这一设置的缺点是,它假定应用程序出于某些其他原因(在Flask Foo外部显式配置)未使用Flask Redis。如果是,我们得到两个并排存在的物体,这似乎是错误的 用户必须自
Flask Foo.init_app()
必须在Flask Redis.init_app()之后调用,我们不是自找麻烦吗
需要明确的是,这不是一个专门关于Flask Redis或其工作原理的问题!我只是想了解在扩展之上构建扩展的正确方法。Flask扩展与python模块具有相同的结构。您应该在setup.py文件中指定所有要求。 比如说
您可以将depend扩展传递给init_应用程序 flask_foo/init.py 现在,您可以从
current\u app
获取foo\u manager
对象,如下所示:
models.py
最后,也许您必须通过app_context()注册foo:
run.py
太好了,这对我们有好处
其他提示:谢谢您的回答!我理解这部分。我不太确定的是模块及其依赖项应该如何初始化。
install_requires=[
'Flask',
'Babel>=2.3',
'Jinja2>=2.5'
],
class FooManager:
def __init__(self, app=None, db=None, **kwargs):
self.app = app
if app is not None:
self.init_app(app, db, **kwargs)
def init_app(self, app, db, **kwargs):
self.db = db
app.config.setdefault('xxx', xxx)
# Bind Flask-Foo to app
app.foo_manager = self
from flask import current_app
db = current_app.foo_manager.db
class XXX(db.Model):
pass
with app.app_context():
FooManager(app, db) # or xx = FooManager(); xx.init_app(app, db)