Sadmin:打造私有Django公共庫實現代碼複用

我們藉助於Django開發了許多的內部管理系統,例如之前介紹過的ProbiusKerriganProxy等等,這些系統看起來長的都一樣,但實際實現的功能確是千差萬別,這些不同的系統爲什麼會長的一樣呢?這不僅僅是因爲它們使用了同一套前端模板,更爲重要的是我們將很多大多系統都要用到的基礎功能給集中在了一起,封裝成了一個基礎的Django應用,例如前端頁面及常用插件、後端用戶及權限管理等等,任何一個Django項目只要集成了這個應用就能快速擁有這些功能,不僅省去了大把的基礎功能開發時間,而且對於後續的更新也是非常的友好

設計思路

因爲各種各樣的原因,我們沒有辦法把所有的功能都集中在一個系統裏,必然會有多個系統的存在,而對於每個系統都有一些基礎的功能要實現,例如用戶管理、權限管理、日誌記錄等等,最初的時候我會copy已開發完成項目的基礎代碼到新項目使用,這樣最爲簡單方便,但若有bug修復或功能更新,我就必須同時修改多個項目的代碼,這不僅繁瑣還容易出錯,爲了優化體驗,我決定把所有的基礎功能從項目中抽離出來,打包成公共應用供項目引用,這個公共應用我們就叫sadmin

打包主要藉助setuptools來完成,打包完成後上傳至私有倉庫,應用服務器中直接通過pip來安裝即可,簡單方便

主要功能

Sadmin具體包含的功能主要有:

1.集成了基於adminLTE的前端模板,以及常用的前端組件,例如select2、datatables等

2.網站的標題、Title、主題等可後臺配置

3.OpenId、LDAP等多種認證方式

4.後臺配置菜單,並可根據不同權限顯示不同菜單

5.用戶、組、部門管理,用戶的登錄登出

6.自動記錄操作日誌

7.封裝了對於數據庫的增刪改查

系統開發中會有大量關於數據庫的增刪改查操作,Django自帶的Admin系統很好的實現了這塊的功能,但admin後臺不僅醜,對於很多稍微複雜點的需求都不好實現,所以我們直接放棄了自帶的admin系統,爲了方便的進行CRUD,我參考Django的ViewSet封裝了兩個方法ListCreateView RetrieveUpdateDestroyView來處理

以對Product表的增刪改查爲例,後端只需要短短的幾行代碼就行了

class ProductList(ListCreateView):
    model = Product
    template = 'workflow/product.index.html'
    permission = {'get': 'loginuser', 'post': 'workflow.product_change'}


class ProductDetail(RetrieveUpdateDestroyView):
    model = Product
    permission = {'get': 'workflow.product_select', 'put': 'workflow.product_change',
                  'delete': 'workflow.product_delete'}

幾行代碼便可以讓後端處理對數據庫的增刪改查,同時返回固定格式的json數據,而對於前端頁面就沒有太多的規範了,按照喜好怎麼設計都可以

除了以上這些主要功能外,還集成了一些例如全站水印、通知發送、數據校驗等等其他小功能

使用效果

有了Sadmin,我們在開發的過程中就不需要再來考慮這些基礎的功能,更加專注於業務本身,效率提升明顯,內部已有將近10個項目使用了Sadmin,運行穩定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章