Flask Web Design的作者Miguel说,许多Web框架可能集成度虽然高,但是一旦开发者的需求与框架设计者设定的方案相悖,则会感觉非常痛苦。而Flask是一个灵活的框架,可以自由选择其中的组件。
使用F.A.B设计过一段日子了,可以至少归纳出几点:
- F.A.B基于Flask,集成了许多额外组件,如sqlalchemy,oauth等;
- F.A.B底层设计中,将Model/View紧密结合,但是Controller部分,即Model/View整合的“glue”部分给开发者留下的余地较少。
- F.A.B最简设计只需要设计数据库表格(Model),界面View部分也是从Model部分自动生成的资源列表、相关资源列表和细节。
- 开发一个Admin的管理界面,的确可以在几百行代码以内完成。
- IoT原型与传统互联网应用中,增加了受控物联网资源,也因为物联网与共享经济的结合,其内部关系数据库,出现了更多多对多的关系。
- 根据stackoverflow网站统计数据,F.A.B提问者较少,其中5~10%与我有关。但是回应不太积极。后来发现Github上的issues才是主要QA场所。
接下来我的主要工作是,结合工程文档和Github解决对于Model/View/URL/Controller的定制需求。发布一个工程源码提供给大家使用。
基于FAB的工程
采用F.A.B的设计不算多,最知名的是Apache软件基金会正在孵化中的Apache Superset,是由Airbnb提交给ASF的开源项目,是开源的数据挖掘和BI。算是一个比较重型的框架。其中安全、认证部分直接来自于F.A.B.
更新
今天阅读了一些文档和问题清单,发现在models.py中可以使用额外方法来返回不同HTML代码片段的方法,虽然这样做混淆了model/view的界限,但是毕竟是一种可行方法。如此,则可以实现添加定制页面代码,甚至列表字段,并指向详情页面和单独页面。
同时,在views.py,即使是采用ModelView,即模型视图类中,也可以定义方法,映射成为路径,并在方法中使用更加底层的sqlalchemy来查询数据库。这样可以采用类似MVC方式来构建一些定制的网页。
第三,在前些天的开发中,通过模板方式直接替换了Google Chart API,而支持了ECharts。当然,如果要更好地支持ECharts,还需要override某些JSON数据源等底层类。也可以支持其他的主流js库,如D3.js。
换而言之,在F.A.B中,依然可以依靠Flask以及扩展来实现两种不同风格的编程,一种是Flask MVC,一种是F.A.B的ModelView,前者适合定制,后者适合快速的Admin开发。