【发布时间】:2018-08-08 14:17:08
【问题描述】:
我想创建一个依赖于另一个 Flask 扩展的 Flask 扩展。为了争论,说它是 Flask-Foo,它需要 Flask-Redis 将一些特定的数据存储在 Redis 数据库中。
我知道我可以向 Flask-Redis 添加安装依赖项。但是我不明白我应该如何实例化和初始化 Flask-Redis。
Flask-Foo 的设置设置了 Flask-Redis 对象。 这样做的缺点是它假定应用程序由于某些其他原因也没有使用 Flask-Redis ,在 Flask-Foo 之外显式配置。如果是,我们会得到两个并排存在的对象,这似乎是错误的。
用户必须自己实例化和配置 Flask-Redis。 Flask-Foo 检查它是否已为该应用程序初始化,否则会抱怨。问题在于它似乎给用户强加了样板文件——当他们对 Flask-Redis 的配置没有其他知识或兴趣时,为什么他们必须设置 Flask-Redis 才能使用 Flask-Foo?此外,如果这意味着
Flask-Foo.init_app()总是必须在Flask-Redis.init_app()之后调用,我们不是自找麻烦吗?不要使用 Flask-Redis。 直接使用 Redis 包,在 Flask-Foo 代码中管理连接。这可能会避免上述问题。但这似乎并不优雅——我们基本上必须解决 Flask-Redis 解决的问题。如果 Flask-Foo 继续支持替代数据库,它将变得复杂,因为我们必须维护代码来管理不同类型的连接。
需要明确的是,这不是一个专门关于 Flask-Redis 或其工作原理的问题!我只是想了解在扩展之上构建扩展的正确方法通常是什么。
【问题讨论】: