# tornadoadmin
**Repository Path**: future2018/tornadoadmin
## Basic Information
- **Project Name**: tornadoadmin
- **Description**: 基于Tornado+LayUI+MySQL5.7 搭建的 MVC框架,可快速用于二次开发;代码生成功能,可直接生成后台CRUD代码和前端UI代码。
- **Primary Language**: Unknown
- **License**: Artistic-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/meadhu/tornadoadmin
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2025-07-14
- **Last Updated**: 2025-07-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Tornado Admin
基于Tornado的ORM管理后台,演示地址
#### 项目简介
>Tornado Admin 基于 python框架 Tornado + Layui 开发的后台管理系统,基于本系统即可快速构建你的功能业务
>
>项目旨在为python开发者提供一个后台管理系统的模板,成为您构建信息管理系统,物联网后台....等等应用时灵活,简单的工具
>
> gii_model 可用于快速反向生成model
>
> gii_crud 快速生成 增删改查前后端代码, 简单调整下, 即可使用
#### 内置功能
- [x] 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
- [x] 权限管理:配置系统菜单,操作权限,按钮权限标识等。
- [x] 角色管理:角色菜单权限分配。
- [x] 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
- [x] 登录日志:系统登录日志记录查询包含登录异常。
- [x] 服务监控:监视当前系统CPU、内存、磁盘、python版本,运行时长等相关信息。
- [x] 文件上传: 图片上传示例
- [ ] 定时任务: 简单的定时任务
- [x] 代码生成: 根据表生成model, 根据表生成增删改查后端代码和前台页面
- [x] JWT认证: 支持JWT认证
#### 项目结构
```
Tornado Admin
├─common # 公共类
│ ├─ __init__.py # 项目启动时, 初始化数据库连接
│ ├─ ApsChedulerHelper.py # 定时任务类
│ ├─ DbHelper.py # 数据库连接公共类
│ └─ HttpHelper.py # Http请求公共类
├─config # 配置文件
│ └─ __init__.py
├─docker_data
├─docs # 文档
├─handler # 控制器层
│ ├─ __init__.py
│ ├─ IndexHandler.py # 前台首页
│ ├─ HomeHandler.py # 后台首页
│ ├─ AuthHandler.py # 前台登录相关
│ ├─ BaseHandler.py # 公共类
│ ├─ DeptHandler.py # 部门管理
│ ├─ DictHandler.py # 字典管理
│ ├─ FileHandler.py # 文件管理
│ ├─ LogHandler.py # 日志管理
│ ├─ MonitorHandler.py # 监控管理
│ ├─ PowerHandler.py # 权限管理
│ ├─ RoleHandler.py # 角色管理
│ ├─ TaskHandler.py # 任务管理
│ └─ UserHandler.py # 用户管理
├─models
├─static # 静态文件
├─templates # 模板
├─app.py # 主入口
├─docker-compose.yml
├─Dockerfile
├─README.md
├─requirements.txt
└─start.sh
```
#### 本地开发环境搭建
```bash
# 下 载
git clone https://gitee.com/meadhu/tornadoadmin.git
# 安 装
pip install -r requirements.txt -i https://pypi.douban.com/simple
# 修改数据库连接信息 【不需要提前创建数据库, 在第一次运行时会自动创建并导入初始化数据】
config/__init__.py
# 执行命令启动项目 【项目第一次启动, 会自动创建数据库, 并导入初始化数据】
python run.py
# 访问 默认后台账号密码 admin admin
http://127.0.0.1:3001/
```
#### 线上docker部署
```shell
# 下 载
git clone https://gitee.com/meadhu/tornadoadmin.git
# 进入项目目录
cd tornadoadmin
# docker compose 构建项目镜像
docker-compose build
# docker-compose 运行项目
docker-compose up -d
# 访问
http://<线上IP>:3001/
```
#### Venv 安装
```bash
python -m venv venv
```
#### 命令行工具
```bash
# 通过表名, 反向生成Model
python app.py gen_model <表名>
# 通过表名,生成CRUD页面和功能(前提是已经生成了Model)
python app.py gen_crud <表名>
# 在 /app.py 中, 添加路由
```
#### 代码生成示例
```shell
# 1. 创建表
DROP TABLE IF EXISTS `admin_project`;
CREATE TABLE `admin_project` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '项目名称',
`code` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '项目标识',
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`details` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '详情',
`sort` int(11) NULL DEFAULT NULL COMMENT '排序',
`create_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`update_at` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`enable` int(11) NULL DEFAULT NULL COMMENT '是否启用',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
INSERT INTO `admin_project` VALUES (1, '示例项目一', 'proj_code_1', '这是示例项目一的备注信息', '这是示例项目一的详情信息', 10, NULL, NULL, 1);
INSERT INTO `admin_project` VALUES (2, '示例项目2', 'proj_code_2', '这是示例项目2的备注信息', '这是示例项目2的详情信息', 20, NULL, NULL, 1);
INSERT INTO `admin_project` VALUES (3, '示例项目3', 'proj_code_3', '这是示例项目3的备注信息', '这是示例项目3的详情信息', 30, NULL, NULL, 0);
SELECT * from `admin_project` ORDER BY id DESC LIMIT 10;
```
```shell
# 2. 生成 model
python app.py gen_model admin_project
```
```shell
# 3. 生成 后端功能和前端页面
python app.py gen_crud admin_project
```
```shell
# 4. 修改 app.py 中,路由配置
```
```shell
# 5. 启动项目,访问 http://localhost:3001/admin/project/main
```
#### 预览项目
```shell
# 分页代码 https://github.com/wizeline/sqlalchemy-pagination
from sqlalchemy_pagination import paginate
page = paginate(session.query(User), 1, 25)
# The pagination objects has the following attributes
#items: The items of the current page base on the query
#total: Total number of items
#pages: Total number of pages
#has_next: Boolean indication wether there are more pages to fetch
#has_previous: Boolean indicating wether there are previous pages
#next_page: Next page number or None if the current page is the last one
#previous_page: Previous page number or None if the current page is the last one
```
#### JWT认证 使用
```shell
# 添加 verify_token 参数值为 True, 示例在 handler/UserHandler.py def data()
@authorize("admin:user:main", log=False, verify_token=True)
# 请求示例
curl --location --request GET 'http://localhost:3001/admin/user/data?page=1&limit=10' \
--header 'Authorization: Bearer eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjUzNjU2NjI2fQ.h2WryWa_6jcdEtUtRZM1kEUDNTUif8b5pcb_ZBMgGQ4'
```