Flask Web Design的作者M(jìn)iguel說,許多Web框架可能集成度雖然高岖寞,但是一旦開發(fā)者的需求與框架設(shè)計(jì)者設(shè)定的方案相悖拴念,則會(huì)感覺非常痛苦类垦。而Flask是一個(gè)靈活的框架,可以自由選擇其中的組件蹂匹。
使用F.A.B設(shè)計(jì)過一段日子了碘菜,可以至少歸納出幾點(diǎn):
- F.A.B基于Flask,集成了許多額外組件限寞,如sqlalchemy忍啸,oauth等;
- F.A.B底層設(shè)計(jì)中履植,將Model/View緊密結(jié)合计雌,但是Controller部分,即Model/View整合的“glue”部分給開發(fā)者留下的余地較少玫霎。
- F.A.B最簡(jiǎn)設(shè)計(jì)只需要設(shè)計(jì)數(shù)據(jù)庫表格(Model)凿滤,界面View部分也是從Model部分自動(dòng)生成的資源列表妈橄、相關(guān)資源列表和細(xì)節(jié)。
- 開發(fā)一個(gè)Admin的管理界面翁脆,的確可以在幾百行代碼以內(nèi)完成眷蚓。
- IoT原型與傳統(tǒng)互聯(lián)網(wǎng)應(yīng)用中,增加了受控物聯(lián)網(wǎng)資源鹃祖,也因?yàn)槲锫?lián)網(wǎng)與共享經(jīng)濟(jì)的結(jié)合溪椎,其內(nèi)部關(guān)系數(shù)據(jù)庫,出現(xiàn)了更多多對(duì)多的關(guān)系恬口。
- 根據(jù)stackoverflow網(wǎng)站統(tǒng)計(jì)數(shù)據(jù)校读,F(xiàn).A.B提問者較少,其中5~10%與我有關(guān)祖能。但是回應(yīng)不太積極歉秫。后來發(fā)現(xiàn)Github上的issues才是主要QA場(chǎng)所。
接下來我的主要工作是养铸,結(jié)合工程文檔和Github解決對(duì)于Model/View/URL/Controller的定制需求雁芙。發(fā)布一個(gè)工程源碼提供給大家使用。
基于FAB的工程
采用F.A.B的設(shè)計(jì)不算多钞螟,最知名的是Apache軟件基金會(huì)正在孵化中的Apache Superset兔甘,是由Airbnb提交給ASF的開源項(xiàng)目,是開源的數(shù)據(jù)挖掘和BI鳞滨。算是一個(gè)比較重型的框架洞焙。其中安全、認(rèn)證部分直接來自于F.A.B.
更新
今天閱讀了一些文檔和問題清單拯啦,發(fā)現(xiàn)在models.py中可以使用額外方法來返回不同HTML代碼片段的方法澡匪,雖然這樣做混淆了model/view的界限,但是畢竟是一種可行方法褒链。如此唁情,則可以實(shí)現(xiàn)添加定制頁面代碼,甚至列表字段甫匹,并指向詳情頁面和單獨(dú)頁面甸鸟。
同時(shí),在views.py兵迅,即使是采用ModelView抢韭,即模型視圖類中,也可以定義方法喷兼,映射成為路徑篮绰,并在方法中使用更加底層的sqlalchemy來查詢數(shù)據(jù)庫。這樣可以采用類似MVC方式來構(gòu)建一些定制的網(wǎng)頁季惯。
第三吠各,在前些天的開發(fā)中臀突,通過模板方式直接替換了Google Chart API,而支持了ECharts贾漏。當(dāng)然候学,如果要更好地支持ECharts,還需要override某些JSON數(shù)據(jù)源等底層類纵散。也可以支持其他的主流js庫梳码,如D3.js。
換而言之伍掀,在F.A.B中掰茶,依然可以依靠Flask以及擴(kuò)展來實(shí)現(xiàn)兩種不同風(fēng)格的編程,一種是Flask MVC蜜笤,一種是F.A.B的ModelView濒蒋,前者適合定制,后者適合快速的Admin開發(fā)把兔。