花了整整一個(gè)多月來學(xué)習(xí)Flask AppBuilder(以下簡稱FAB)靠粪,當(dāng)初就計(jì)劃如果有困難兔簇,就退回Flask/Cyclone/Tornado來重新構(gòu)建工程≡逯危現(xiàn)在看來喇辽,可以使用FAB與經(jīng)典Flask混合編程的方式來實(shí)現(xiàn)。
FAB的好處
FAB有一大堆好處贤斜,其中包括自動化的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ù)庫中,可以動態(tài)修改深碱,而非硬性編碼在源碼中腹鹉,比較靈活。
FAB的缺陷
FAB的缺陷與好處是一張紙的兩面敷硅,自動化的CRUD意味著許多Controller部分代碼功咒,即邏輯和渲染代碼是嵌入在FAB框架中的。在相當(dāng)多的情形中绞蹦,自動CRUD意味著修改困難力奋。這一個(gè)月,我基本上就是受其折磨幽七,反復(fù)揣摩如何定制景殷。
混合編程
做了若干個(gè)試驗(yàn)項(xiàng)目之后,發(fā)現(xiàn):FAB的自動化CRUD其實(shí)很適合作為后臺管理員的界面,后臺管理員可以完整地查看所有的數(shù)據(jù)以及相互關(guān)系滨彻。前臺用戶業(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自動創(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會自動創(chuàng)建權(quán)限上忍,管理員可以通過FAB骤肛,將其定義為某種角色可使用的對象。
即將交付
厘清了FAB/Flask混合編程的分界線之后窍蓝,即將交付的工程包括:
- 智能門鎖
- LoRa智能網(wǎng)關(guān)腋颠,面向智能城市和農(nóng)業(yè)
- NB-IoT/eMTC資產(chǎn)定位