Flask的通用CRUD管理,使用WTForms?

5 投票
3 回答
6798 浏览
提问于 2025-04-17 08:11

有没有基于WTForms的通用CRUD管理工具可以用在Flask上?

现在我们正在构建一个混合后台系统,管理员需要从多个来源处理大量数据,比如MongoDB、Redis、ini文件、环境变量等等。为每个数据源写一个特定的管理视图似乎太浪费时间了,但所有的Flask管理工具或WTForms管理解决方案都是基于某种固定的ORM(对象关系映射),比如MongoEngine、AppEngine Datastore、SQLAlchemy等。

有没有更通用的解决方案,可以自动生成不依赖于特定ORM的管理界面?

我需要它提供以下功能:

  • 可以查看一组项目的列表,支持在线编辑或批量操作就更好了!
  • 可以编辑某个特定项目的视图,用于添加或修改数据

只需要定义一些表单模型,实施一个迭代方法,就能自动生成一个完整的管理界面。

有没有类似的可重用的开源项目?

3 个回答

3

我建议你看看以下内容:

https://github.com/sbook/flask-mongoengine

https://github.com/coleifer/flask-peewee

你可以把sbook的flask-mongoengine和coleifer的flask-peewee中的管理功能结合起来。我觉得这应该不会太难。coleifer的管理功能使用了twitter-bootstrap,这一点很不错,而且他对问题的反馈也很及时。

我之前在flask上用过mongoengine和flask-peewee,这两个都非常好用。

5

我知道这个问题已经很老了,但现在有了Flask-admin,它真的很棒。

它非常灵活,写自己的处理程序来存储和处理数据也很简单(快速入门)。

2

简单来说,答案是否定的,至少我知道的情况是,Redis和MongoDB没有自动生成的ORM。

接下来我来详细解释一下:

之所以有固定ORM的CRUD生成,而没有基于自由格式记录的数据存储的CRUD生成,原因很简单:自由格式记录的特性让我们很难创建一个固定的结构。

以Redis为例,假设每条记录都是一个哈希,比如键是'user-{id}',字段包括用户名、年龄和注册时间。现在,如果你给用户添加一个新字段'location',会发生什么呢?Redis对此并不在意,你只需在修改记录时添加这个字段,不需要回去给每个哈希都加上这个字段。这就简单多了。

但是,现在你有了CRUD的魔法,它试图判断应该显示哪些字段。假设你决定先查看第一条记录来看看有哪些字段,但如果'user-1'缺少了这个新字段'location'呢?那么CRUD就无法生成这个字段了。

而且,由于Redis把每个值都存储为字符串,CRUD也不知道,比如'age'这个字段其实只接受整数,而'registered_on'实际上是一个ISO格式的日期字符串。

你可能会说,MongoDB有数据类型!当然,假设我们忽略每条记录可以有不同字段的情况,假装每条记录都有相同的字段,那么在这里做一些自动化的CRUD是可能的?是的,你会比在Redis中做得好一些,因为MongoDB有日期类型和整数类型,但即使这样也会有一些不一致的地方。比如你有一个字符串值,怎么知道这个字符串值是需要多行输入(textarea)还是单行输入(input type=text),或者只是从几个选项中选择的下拉框呢?

因此,真正为许多自由格式类型做理论上的CRUD,唯一的办法就是提前定义好每条记录的'结构'(也许通过表单定义?),并可能实现某种接口类/契约,让CRUD工具能够列出记录以获取对象,按键获取单条记录,更新/创建记录,以及按键删除单条记录。

这样一个理论上的'可插拔' CRUD工具会非常酷,我很想看到有人来实现它。

撰写回答