Flask AppBuilder混合編程

Fig 1: Flask Web Framework Logo

花了整整一個(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)定位
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容