1. 程式人生 > >FF.PyAdmin 介面服務/後臺管理微框架 (Flask+LayUI)

FF.PyAdmin 介面服務/後臺管理微框架 (Flask+LayUI)

原始碼(有興趣的朋友請Star一下)

  • github: https://github.com/fufuok/FF.PyAdmin
  • gitee: https://gitee.com/fufuok/FF.PyAdmin

初衷

運維開發中, 各類介面服務和後臺管理系統必不可少, 索性寫個通用的/簡單易用的/支援快速開發的微框架.

一是開發時儘可能只關注業務邏輯, 快速實現, 不用再過多考慮架構/前端/佈局什麼的.

二是將常用業務邏輯二次封裝, 使用時, 用簡潔的語句即可完成複雜的事務, 並自動處理異常.

三是方便運維小夥伴們快速理解 Web 專案開發, 無須深入理解 Flask 和前端即可完成此類專案開發.

特點

  1. 後端 Flask, 對異常處理, 資料庫, 表單驗證, 許可權驗證都做了二次封裝, 呼叫更簡單, 通用性強.
  2. 前端 LayUI, 對資料表格作了二次封裝, 支援自動按資料表生成表頭, 可選使用. 豐富配色, 豐富圖示.
  3. 前後端完全使用 API 介面通訊, JSON 資料互動. 方便與各類前端框架/小程式對接.
  4. 適合做純 API 介面服務, 也適合同時做介面服務和後臺管理, 應用廣泛/靈活.
  5. 對 HTTP 異常二次封裝, APIException/MsgException, 標準化 JSON 欄位和錯誤訊息頁面.
  6. 實現全域性異常處理, 支援配置中自定義 404 等狀態碼訊息. 500 狀態碼時自動記錄日誌.
  7. 異常返回自適應, POST 和 AJAX 請求自動返回JSON資料, 其他狀態展示自定義錯誤頁, DEBUG 顯示原始異常.
  8. 自定義常用許可權校驗裝飾器, 登入驗證, 選單許可權驗證, 介面許可權驗證, 來訪 IP 白名單等.
  9. 依託 Flask 藍圖和檢視函式, 適應大部分情況下的許可權管理需求. 擴充套件性強.
  10. WTForms 二次封裝, 極簡呼叫, 適應性強. 中文內建錯誤訊息, 自動資料獲取的驗證.
  11. 驗證失敗自動按需返回 JSON 或錯誤頁. 自定義了通用的字串和正整數驗證方法, 適用性廣.
  12. 修正 Flask-wtf 0.14.2, @csrf.exempt 無效的問題.
  13. SQLAlchemy 資料庫互動二次封裝, 實現自動提交機制和完善的異常處理, CRUD 全封裝, 極簡呼叫.
  14. 自帶檔案日誌, 按日誌檔案大小自動滾動, 無須配置.
  15. 安全, 方便, 完善的配置檔案方案.

圖示

依賴

  1. Flask==1.1.1
  2. Flask_Login==0.4.1
  3. Flask_WTF==0.14.2
  4. Flask_Script==2.0.6
  5. Flask_Migrate==2.5.2
  6. Flask_SQLAlchemy==2.4.0
  7. SQLAlchemy==1.3.11
  8. cymysql==0.9.14
  9. WTForms==2.2.1
  10. Authlib==0.13
  11. requests==2.22.0
  12. concurrent_log_handler==0.9.16
  13. xxtea==1.3.0
  14. 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  虛擬環境

配置

  1. secret_settings.py 必須, 一般設定 SECRET_KEY 及資料庫配置, 不要加入 Git.
  2. settings.py 必須, 常規配置, APP_NAME, 日誌引數, 錯誤訊息等.
  3. production_settings.py 可選, 預設載入項, 生產環境額外配置.
  4. development_settings.py 可選, 開發環境額外配置.
  5. 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.pyOA_CLIENT_SECRETPYADMIN_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')

使用

  1. Python3.5+, pip, MySQL 環境
  2. 建好 MySQL 資料庫, 匯入 data/db_ff_pyadmin.sql 示例資料, 修改配置檔案
  3. pip3 install -r requirements.txt
  4. python3 start.py
  5. 訪問: 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