我有一个可用的 Flask 应用程序,其中包含相当广泛的SQLite数据库(约 100k 个条目)。根据文档,我正在努力以最简单的方式使用Flask-App-Builder (FAB)引导一些模型视图:
class MyModelView(ModelView):
datamodel = SQLAInterface(MyModel)
list_columns = ['col1', 'col2']
而不是像这样启用它们:
appbuilder.add_view(MyModelView, 'Models')
它工作正常。问题是,每次我访问列表视图时,它都是从头开始生成的——数据库查询、一些 FAB 处理、模板生成。而且它主观上非常慢(挂钟几十秒;我不确定如何正确分析 Flask 应用程序)。
我认为在某些时候缓存 FAB 视图可能有助于加快速度,但我不确定如何去做。对于普通视图,我使用Flask-Cache:
@app.route('/some_route')
@cache.cached()
def view_function():
data = time_consuming_operation()
return render_template('template.html', data=data)
所以,问题:
如何将缓存与 FAB 模型视图一起使用?有没有办法加快 FAB ModelViews 的工作?
谢谢!
结果
好的,在探索 FAB 源之后,我发现可以重新定义 ModelView 或其父级的方法以获得所需的行为(在我的情况下 - 限制对列表视图的查询并使用 Flask-Cache 对其进行缓存)。然而,这将需要大量的代码,这违背了使用 FAB 的全部目的。结果我搬到了Flask-Admin。它具有更简单的外观,并且不包括例如内置身份验证,但在我的情况下它的工作速度非常快,而且配置很少 -它解决了我的问题。
我仍然建议在少量数据(约 1000 个条目)的情况下尝试 FAB,它具有更丰富的功能,并且它的进一步发展可能会给我们一个非常整洁的产品。
顺便说一句,我还没有找到缓存 FAB ModelView 响应的方法,但对我来说,这个问题现在已经结束了。