FF.PyAdmin 介面服務/後臺管理微框架 (Flask+LayUI)
阿新 • • 發佈:2019-12-11
原始碼(有興趣的朋友請Star一下)
- github: https://github.com/fufuok/FF.PyAdmin
- gitee: https://gitee.com/fufuok/FF.PyAdmin
初衷
運維開發中, 各類介面服務和後臺管理系統必不可少, 索性寫個通用的/簡單易用的/支援快速開發的微框架.
一是開發時儘可能只關注業務邏輯, 快速實現, 不用再過多考慮架構/前端/佈局什麼的.
二是將常用業務邏輯二次封裝, 使用時, 用簡潔的語句即可完成複雜的事務, 並自動處理異常.
三是方便運維小夥伴們快速理解 Web 專案開發, 無須深入理解 Flask 和前端即可完成此類專案開發.
特點
- 後端 Flask, 對異常處理, 資料庫, 表單驗證, 許可權驗證都做了二次封裝, 呼叫更簡單, 通用性強.
- 前端 LayUI, 對資料表格作了二次封裝, 支援自動按資料表生成表頭, 可選使用. 豐富配色, 豐富圖示.
- 前後端完全使用 API 介面通訊, JSON 資料互動. 方便與各類前端框架/小程式對接.
- 適合做純 API 介面服務, 也適合同時做介面服務和後臺管理, 應用廣泛/靈活.
- 對 HTTP 異常二次封裝, APIException/MsgException, 標準化 JSON 欄位和錯誤訊息頁面.
- 實現全域性異常處理, 支援配置中自定義 404 等狀態碼訊息. 500 狀態碼時自動記錄日誌.
- 異常返回自適應, POST 和 AJAX 請求自動返回JSON資料, 其他狀態展示自定義錯誤頁, DEBUG 顯示原始異常.
- 自定義常用許可權校驗裝飾器, 登入驗證, 選單許可權驗證, 介面許可權驗證, 來訪 IP 白名單等.
- 依託 Flask 藍圖和檢視函式, 適應大部分情況下的許可權管理需求. 擴充套件性強.
- WTForms 二次封裝, 極簡呼叫, 適應性強. 中文內建錯誤訊息, 自動資料獲取的驗證.
- 驗證失敗自動按需返回 JSON 或錯誤頁. 自定義了通用的字串和正整數驗證方法, 適用性廣.
- 修正 Flask-wtf 0.14.2, @csrf.exempt 無效的問題.
- SQLAlchemy 資料庫互動二次封裝, 實現自動提交機制和完善的異常處理, CRUD 全封裝, 極簡呼叫.
- 自帶檔案日誌, 按日誌檔案大小自動滾動, 無須配置.
- 安全, 方便, 完善的配置檔案方案.
圖示
依賴
- Flask==1.1.1
- Flask_Login==0.4.1
- Flask_WTF==0.14.2
- Flask_Script==2.0.6
- Flask_Migrate==2.5.2
- Flask_SQLAlchemy==2.4.0
- SQLAlchemy==1.3.11
- cymysql==0.9.14
- WTForms==2.2.1
- Authlib==0.13
- requests==2.22.0
- concurrent_log_handler==0.9.16
- xxtea==1.3.0
- behave==1.2.6
該框架基於公司內部 OA 系統 OAuth2 登入, 在登入畫面點選即可進入演示後臺. 需要自行準備 OAuth2 引數配置到配置檔案, 如 QQ, 微信, GitHub, 釘釘等. 也可自行實現賬號密碼登入.
# app/views/web.py
@bp_web.route('/authorize')
def web_authorize():
"""OAuth 登入跳轉"""
# TODO: (演示使用, 自動登入), 請刪除並配置自己的認證方式, OAuth2或賬密系統
set_user_login({
'job_number': 7777,
'realname': 'Fufu'
})
return redirect(url_for('web.web_index'))
結構
.
├── app 應用根目錄, app.root_path
│ ├── conf 配置檔案目錄
│ ├── forms 表單驗證
│ ├── libs 公共類庫
│ ├── models 表模型
│ ├── services 中介軟體, 邏輯處理
│ ├── static 靜態檔案
│ ├── templates 模板檔案
│ └── views 檢視函式
├── data 資料檔案
├── docs 開發文件
├── features BDD
│ └── steps
├── logs 日誌目錄
│ └── behave.reports
├── scripts 指令碼
├── tests 單元測試
├── tmp 臨時檔案
└── venv 虛擬環境
配置
secret_settings.py
必須, 一般設定 SECRET_KEY 及資料庫配置, 不要加入 Git.settings.py
必須, 常規配置, APP_NAME, 日誌引數, 錯誤訊息等.production_settings.py
可選, 預設載入項, 生產環境額外配置.development_settings.py
可選, 開發環境額外配置.testing_settings.py
可選, 測試環境額外配置, BDD 或單元測試時使用.
第 3/4/5 項需要設定環境變數, 預設為 production
, 可選: development
testing
. 如:
# 1. Windows:
set FF_PyAdmin=development
echo %FF_PyAdmin%
# 2. Linux:
export FF_PyAdmin=development
echo $FF_PyAdmin
生產環境建議使用加密環境變數, 生成加密資料的方式如下:
# Fufu~~Text 加密後 792e01268cc350077f772a5f
python3 manage.py encrypt -d Fufu~~Text
使用方法見 secret_settings.py
中 OA_CLIENT_SECRET
和 PYADMIN_DBPASS
, 配置示例:
# Linux (Windows 使用上面的 set 方法)
cp scripts/etc-profile.d-ffpyadmin.sh /etc/profile.d/ffpyadmin.sh
chmod +x /etc/profile.d/ffpyadmin.sh
source /etc/profile.d/ffpyadmin.sh
也可以使用不加密的環境變數, 配置檔案中的獲取環境變數時不加 key 引數即可:
# OA_CLIENT_SECRET = get_environ('PYADMIN_OAUTH_SECRET', key=SECRET_KEY)
OA_CLIENT_SECRET = get_environ('PYADMIN_OAUTH_SECRET')
使用
- Python3.5+, pip, MySQL 環境
- 建好 MySQL 資料庫, 匯入 data/db_ff_pyadmin.sql 示例資料, 修改配置檔案
- pip3 install -r requirements.txt
- python3 start.py
- 訪問: http://127.0.0.1:5000 http://ff.pyadmin:777
資料
- Flask https://github.com/pallets/flask
- OAuth2 https://github.com/lepture/authlib
- LayUI https://github.com/sentsin/layui