
花了整整一個(gè)多月來學(xué)習(xí)Flask AppBuilder(以下簡稱FAB),當(dāng)初就計(jì)劃如果有困難,就退回Flask/Cyclone/Tornado來重新構(gòu)建工程?,F(xiàn)在看來,可以使用FAB與經(jīng)典Flask混合編程的方式來實(shí)現(xiàn)。
FAB的好處
FAB有一大堆好處,其中包括自動(dòng)化的CRUD和皮膚化UI設(shè)計(jì)。從ORM一次型導(dǎo)出:
- /modelview/list
- /modelview/show/<int:>
- /modelview/edit/<int:>
- /modelview/delete/<int:>
- /modelview/add/
對我個(gè)人來說,它幫助我解決了最基礎(chǔ)的RBAC問題:即何種角色對應(yīng)何種權(quán)限。這種設(shè)計(jì)是基于注冊機(jī)制的,權(quán)限記錄在數(shù)據(jù)庫中,可以動(dòng)態(tài)修改,而非硬性編碼在源碼中,比較靈活。
FAB的缺陷
FAB的缺陷與好處是一張紙的兩面,自動(dòng)化的CRUD意味著許多Controller部分代碼,即邏輯和渲染代碼是嵌入在FAB框架中的。在相當(dāng)多的情形中,自動(dòng)CRUD意味著修改困難。這一個(gè)月,我基本上就是受其折磨,反復(fù)揣摩如何定制。
混合編程
做了若干個(gè)試驗(yàn)項(xiàng)目之后,發(fā)現(xiàn):FAB的自動(dòng)化CRUD其實(shí)很適合作為后臺(tái)管理員的界面,后臺(tái)管理員可以完整地查看所有的數(shù)據(jù)以及相互關(guān)系。前臺(tái)用戶業(yè)務(wù)界面和流程適合經(jīng)典Flask開發(fā)組合來完成。FAB的依賴項(xiàng)和經(jīng)典Flask開發(fā)組合的依賴項(xiàng)存在高度重合,所以混合開發(fā)模式完全沒有問題。他們共同依賴項(xiàng)包括:
- Flask,flask框架本身
- Jinja2,模板
- flask-sqlalchemy,flask擴(kuò)展的ORM
- flask-login,flask的登錄組件
- flask-openid,flask的openid組件
- flask-wtform,flask的表單組件
- flask-Babel,flask的多語種支持組件
- Werkzeng WSGI工具集
除了FAB自動(dòng)創(chuàng)建的URL,混合編程之后的URL包括:
- /modelview/list
- /modelview/show/<int:>
- /modelview/edit/<int:>
- /modelview/delete/<int:>
- /modelview/add/
- /modelview/mylist
- /modelview/myshow
- /modelview/myedit
- /modelview/myadd
- /modelview/mydelete
- /modelview/methodx/<param>
其中my*等方法都是通過@expose裝飾符在Flask中注冊URL,如果進(jìn)一步采用@has_access修飾符,F(xiàn)AB會(huì)自動(dòng)創(chuàng)建權(quán)限,管理員可以通過FAB,將其定義為某種角色可使用的對象。
即將交付
厘清了FAB/Flask混合編程的分界線之后,即將交付的工程包括:
- 智能門鎖
- LoRa智能網(wǎng)關(guān),面向智能城市和農(nóng)業(yè)
- NB-IoT/eMTC資產(chǎn)定位