一個基於django框架的SQL 稽核系統二次開發
發現自己最近已經焦頭爛額,每天在各種繁雜的事務中腦袋已經混亂不堪了。凌晨5點30分,失眠,把我在搞的一個SQL 稽核的專案理一理,準備新版本更新上線後就不管了。我的大腦容量真的有限了。
這是一個基於github上 的一個依賴 Inception平臺 SQL稽核系統,我比較喜歡他基於bootstrap 前端的簡潔風格。
以下是它所用到的技術依賴:
框架
前端元件
- 選單欄
- 主題
- 編輯器
- SQL美化
- 表格
- 表格編輯
- 下拉選單
- 檔案上傳
- 時間選擇
- 日期選擇
- 開關
- Markdown展示
服務端
- 佇列任務
- MySQL Connector
- MsSQL Connector
- Redis Connector redis-py
- PostgreSQL Connector
- Oracle Connector
- SQL解析/切分/型別判斷
- MySQL Binlog解析/回滾
- LDAP
- 序列化
- 時間處理
功能依賴
- 視覺化
- MySQL稽核/執行/備份 |
- 資料庫稽核
- MySQL索引最佳化
- SQL最佳化/壓縮
- Binlog2SQL
- 表結構同步
- 慢日誌解析展示 |
- 大表DDL |
- MyBatis XML解析
- RDS管理
而我的二次開發主要做什麼呢?
我從去年就開始在工作穿插著瞭解這個程式的結構,光在安裝除錯已經花了不少時間。後來決定推廣使用,在關於賬號登入這塊就不好搞了,該稽核系統已經加入LDAP 域登入,公司的域控剛好才剛開始推廣,我們大部分的開發還不習慣於域,而公司有自己的單點登入,於是我不得不在單點登入上進行改造,公司單點登入已經提供了介面,而我的認證步驟主要如下:
-
訪問稽核系統後判斷未登入便轉入單點登入登入介面頁面,此時附上自身在單點登入中APPID
-
在單點登入系統上用統一賬號登入透過後,單點登入產生token資訊跳轉回SQL稽核系統
-
於是SQL 稽核系統在接收到token及其他相關資訊後再進行判斷認證。具體程式碼片段如下:
#cwd # 登入頁面 def login(request): token = request.GET.get('token') logouturl = SSO_LOGOUT if request.user and request.user.is_authenticated: return HttpResponseRedirect('/') elif token is None : return HttpResponseRedirect(SSO_INDEX) else: url = SSO_TOKEN + urllib.parse.quote(token) req = urllib.request.Request(url) res_data = urllib.request.urlopen(req) res = json.loads(res_data.read()) if res.get('success'): username = res.get('loginid') userid = res.get('userid') auth = svjAuth(request) tokenpwd = auth.getUser(username) if tokenpwd['status'] == 0: tokenpwd = tokenpwd['data'] result = auth.authenticate(username, tokenpwd) if result['status'] == 0: Users.objects.filter(username=username).update(ssouserid=userid) return HttpResponseRedirect("/") elif tokenpwd['status'] == 1: Users.objects.filter(username=username).update(ssouserid=userid) data="使用者存在,請聯絡管理員申請tokenpwdkey" return render(request, 'login.html',{"data":data, "url":logouturl}) elif tokenpwd['status'] == 2: data = "您還不是SQL稽核系統使用者,請聯絡管理員申請註冊" return render(request, 'login.html',{"data":data, "url":logouturl}) else: data = "您還不是SQL稽核系統使用者,請聯絡管理員申請註冊HH" return render(request, 'login.html',{"data":data, "url":logouturl})
這裡要提一下的是關於在單點登入驗證透過後在SQL稽核系統需要進行認證,當時想直接繞過django的認證模組直接登入,研究了很長一段時間都還是無法透過,最終使用了比較土的辦法來進行認證。
之後,便是工作通知這一模組,archery已經整合郵件,釘釘機器人通知功能,而我需要對其進行改造的是將通知轉到公司自己的釘釘工作通知模組,這一模組其實也不是很複雜,同樣是呼叫既有的介面即可,主要程式碼片段:
@staticmethod def send_oading(url, content, userlist): """ 傳送oa釘釘訊息 :param url: :param content: :return: """ head = {"Content-Type": "application/json; charset=UTF-8", 'Connection': 'close'} data = { "Appid": DING_APPID, "Message": "{}".format(content), "UserList": "{}".format(userlist), } #logger.debug(data) r = requests.post(url=url, json=data, headers=head) r_json = r.json() if r_json['Code'] == 200: logger.debug('oa釘釘推送成功') else: logger.error("""oa釘釘推送失敗 錯誤碼:{} 返回錯誤資訊:{} 請求url:{} 請求data:{}""".format(r_json['Code'], r_json['ErrorMessage'], url, data))
之後,因為要走工單話,就必須結合公司的OA流程,於是乎,只能在生成SQL稽核工單時將相應資訊推送到OA系統中,此時同樣是呼叫OA中發起工單的介面,這裡會根據OA自身的需求呼叫好幾個介面,這一階段開發花費了不少時間。
完成OA工單模組整合之後我們的系統開始推廣使用了。
在用是這樣的:
在使用一段時間後發現github上已經更新了好幾個版本,使用了不少新的功能比如 goInception,加上我發現現有的在提交工單時選擇資料庫管理起來比較麻煩。原來是透過使用者-使用者組-關聯資料庫例項-關聯例項所在的庫。這樣就需要每個小部門組都分配一個資料庫例項許可權了,我們的資料庫數量比較多,所以維護起來比較麻煩。
於是我進行了改造,改成了使用者-關聯資料庫的模式,使用者透過許可權申請來擁有自己的資料庫。
順便換了個 前端模板,個人表示前端模板這些css,js這些比後端python難搞了好多,這個花費了我不少時間,因為期間我嘗試換過好幾個模板。新的前端模板,使用了iframe,這裡遇到過不少坑,比如重新整理保留當前頁面問題,需要儲存iframe的src路徑等
資料庫許可權申請模組:
SQL 上線提交:
另外,寫了段定時去檢查定時執行任務的程式碼,主要的二次開發就是這些了,更多的是希望改造得更加貼合我們的使用習慣,而整個基於核心inception模組還未涉獵,這部分相對比較完善了。詳細資訊可以去github上了解。
感謝github上前輩們的無私奉獻
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-2649913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL稽核 | SQLE 二次開發環境搭建SQL開發環境
- 基於ecshop的二次開發
- 利用Python框架django開發資產管理系統Python框架Django
- Django2.0(一)Django框架開發流程Django框架
- 開發數學系統時,需要掌握的幾個基於Web的數學框架Web框架
- 開發了一個基於thinkphp6.0的快速開發後臺管理系統PHP
- 一種基於事件驅動思想的 SAP 系統整合二次開發方法介紹事件
- Wizard Framework:一個自己開發的基於Windows Forms的嚮導開發框架FrameworkWindowsORM框架
- 基於 solox 二次開發
- 基於Django 的 FreeSwitch 開源GUI 管理系統 YouPBXDjangoGUI
- 一個基於Django的綜合成績管理系統-------環境配置詳解Django
- Django框架急速開發內容管理系統後臺Django框架
- 分享一個基於 Node.js 的 Web 開發框架 – NokitjsNode.jsWeb框架
- KiteCms 是一個基於ThinkPHP5.0.9開發的開源內容管理系統PHP
- 求購個JAVA開發的OA系統,要求能二次開發Java
- 一個簡單的sql稽核案例SQL
- SQL稽核 | 如何使用 SQLE 進行開發階段 SQL稽核SQL
- 基於元件化開發,一個簡單的Android專案框架元件化Android框架
- java 基於SSM框架開發線上音樂視訊MV管理系統JavaSSM框架
- 4 款基於Django框架的開源軟體推薦Django框架
- 一個開源的OJ二次開發
- 開發基於Django和Websocket的堡壘機DjangoWeb
- f-admin——基於 Laravel 框架開發的基礎許可權後臺系統Laravel框架
- 一個基於 gin+ grpc + etcd 等框架開發的小栗子RPC框架
- 一款基於Laravel5.8開發的後臺開發框架Laravel框架
- SQL稽核 | SQLE 如何開發一條自定義的規則SQL
- 貝聊SQL自動稽核系統SQL
- 基於tp開發的線上教育系統
- 基於ThinkPHP框架開發的響應式學生資訊後臺管理系統PHP框架
- Toro - 基於PHP的REST開發框架PHPREST框架
- 一個基於ThinkPHP5的CMS系統PHP
- C/S系統快速開發框架(C#+Winform+SQL)框架C#ORMSQL
- Jmeter二次開發——基於Java請求JMeterJava
- 一整套基於Java開發的的區塊鏈系統Java區塊鏈
- python菜鳥開發日記-基於pyhon及django進行公司打卡系統的破解PythonDjango
- 基於c++的排雷小遊戲二次開發C++遊戲
- 【Python】基於Django Web開發清單PythonDjangoWeb
- 一個Wpf的開發框架框架