源碼(有興趣的朋友請Star一下)
初衷
運維開發中, 各類接口服務和后台管理系統必不可少, 索性寫個通用的/簡單易用的/支持快速開發的微框架.
一是開發時盡可能只關注業務邏輯, 快速實現, 不用再過多考慮架構/前端/布局什么的.
二是將常用業務邏輯二次封裝, 使用時, 用簡潔的語句即可完成復雜的事務, 並自動處理異常.
三是方便運維小伙伴們快速理解 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