源码(有兴趣的朋友请Star一下)

初衷

运维开发中, 各类接口服务和后台管理系统必不可少, 索性写个通用的/简单易用的/支持快速开发的微框架.

一是开发时尽可能只关注业务逻辑, 快速实现, 不用再过多考虑架构/前端/布局什么的.

二是将常用业务逻辑二次封装, 使用时, 用简洁的语句即可完成复杂的事务, 并自动处理异常.

三是方便运维小伙伴们快速理解 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

资料

FF.PyAdmin 接口服务/后台管理微框架 (Flask+LayUI)的更多相关文章

  1. 基于bootstrap的漂亮网站后台管理界面框架汇总

    基于bootstrap的漂亮网站后台管理界面框架汇总 10个最新的 Bootstrap 3 管理模板 这里分享的 10 个模板是从最新的 Bootstrap 3 管理模板集合中挑选出来的,可以帮助你用 ...

  2. 【转】为什么选择Spring Boot作为微服务的入门级微框架

    本文为普元云计算高级工程师许二虎在普元云计算架构设计群的微课堂分享.如需加入普元新一代数字化企业云平台研发设计群参与微课堂.架构设计与讨论直播,请直接回复此公众号:"加群 姓名 公司 职位 ...

  3. 为什么选择Spring Boot作为微服务的入门级微框架

    摘要:1. Spring Boot是什么,解决哪些问题 1) Spring Boot使编码变简单 2) Spring Boot使配置变简单 3) Spring Boot使部署变简单 4) Spring ...

  4. 后台管理微服务(二)——docker的使用

    1. docker概述 1.1 Docker是什么 Docker 是软件工业的集装箱技术 Docker 是一个容器引擎,docker提供了一套完整的容器解决方案. Docker 是一个能将开发的程序自 ...

  5. hsweb 企业后台管理基础框架

    hsweb 详细介绍 业务功能 现在: 权限管理: 权限资源-角色-用户. 配置管理: kv结构,自定义配置.可通过此功能配置数据字典. 脚本管理: 动态脚本,支持javascript,groovy, ...

  6. linux服务后台管理

    把进程放到后台有两种方法 1.cmmand & 2.ctrl+z    暂停到后台 查看后台服务  jobs 把后台进程移到前台 fg  %2 工作号  恢复到前台 后台服务继续执行 bg  ...

  7. java 通过接口在后台管理器中生成数据

    需求:测试人员在后台批量添加数据很麻烦,特别是针对一款商品配置了英语,还需要手动添加法语.俄语.阿拉伯语,很麻烦,但是因为没有项目组配合,做个小工具批量生成数据就只有自己去研究了 第一步:通过抓包工具 ...

  8. Core + Vue 后台管理基础框架8——Swagger文档

    1.前言 作为前后端分离的项目,或者说但凡涉及到对外服务的后端,一个自描述,跟代码实时同步的文档是极其重要的.说到这儿,想起了几年前在XX速运,每天写完代码,还要给APP团队更新文档的惨痛经历.给人家 ...

  9. Core + Vue 后台管理基础框架0——开篇

    1.背景 最近,打算新开个项目,鉴于团队技术栈,选型.net core + vue,前后端分离.本打算捡现成的轮子的,github上大致逛了逛,总发现这样那样的不太适合心中那些“完美实践”,例如:Ab ...

随机推荐

  1. restapi(9)- caching, akka-http 缓存

    restapi作为前后端交互的枢纽:面对大批量的前端请求,需要确保回复的及时性.使用缓存是一项有效工具.我们可以把多数前端请求的回复response存入缓存,特别是一些需要大量计算才能获取的回复值,更 ...

  2. 树上神奇 逆 逆序对(我的叫法)hh的小纸条 重中之重!!!!!

    HH是一位十分爱好数学的大佬,尤其喜爱数数,一天百无聊赖的他写下了一个1-N的排列,并且在小纸条上记下了每个数前面有多少个数比他小,但HH不小心忘记了这个排列.现在只有当时记下的小纸条,现在请你还原出 ...

  3. python购物车练习题

    # 购物车练习# 1.启动程序后,让用户输入工资,打印商品列表# 2.允许用户根据商品编号购买商品# 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒# 4.可随时退出,退出时,打印已购买 ...

  4. 你了解MySQL中的多表联合查询吗?

    前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...

  5. 为什么我加了索引,SQL执行还是这么慢(一)?

    在MySQL中,有一些语句即使逻辑相同,执行起来的性能差异确实极大的. 先抛出一个结论:如果想使用索引树搜索功能,就不能使用数据库函数来处理索引字段值,而是在不改变索引字段值的同时,自己通过SQL语句 ...

  6. 你不知道的JS系列【1】- 什么是作用域

      几乎所有的编程语言都能够储存变量,并且能在之后对这个变量值进行访问或修改,正是储存和访问变量的能力将状态带给了程序,那么,这些变量储存在哪里呢?程序需要时又是如何找到他们?这些问题说明需要一套设计 ...

  7. nyoj 1071-不可以!(a*b + fabs(a*b))

    1071-不可以! 内存限制:64MB 时间限制:1000ms 特判: No 通过数:10 提交数:18 难度:1 题目描述: 判断:两个数x.y的正负性. 要求:不可以使用比较运算符,即" ...

  8. Code Runner for VS Code 突破 1000 万下载量!支持运行超过 40 种语言

    记得三年多前,韩老师那时还在写 PHP(是的,没错!在微软写 PHP),同时需要写 Python 和 Node.js .所以在那时,支持多种语言的 VS Code 已经是笔者的主力编辑器了.唯一不足的 ...

  9. i7-9700也能安装Windows7

    商家说,i7-8700以上不支持Win7,只能安装Win10.我在手机网上也看过同样的说明,是微软与Intel联合行动,意在强迫用户升级到Win10.文章后面有,并不是不能装win7,是没有提供win ...

  10. vue常用指令总结

    一.vue指令 官网解释 指令 (Directives) 是带有 v- 前缀的特殊特性.指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况).指令的职责是,当表达式的值改变 ...