FF.PyAdmin 接口服务/后台管理微框架 (Flask+LayUI)
程序员文章站
2022-07-09 20:17:08
源码(有兴趣的朋友请Star一下) github: "https://github.com/fufuok/FF.PyAdmin" gitee: "https://gitee.com/fufuok/FF.PyAdmin" 初衷 运维开发中, 各类接口服务和后台管理系统必不可少, 索性写个通用的/简单易 ......
源码(有兴趣的朋友请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
资料
- flask https://github.com/pallets/flask
- oauth2 https://github.com/lepture/authlib
- layui https://github.com/sentsin/layui