平台架构与技术栈
整体架构
TK-Safe-UpLoad 采用经典的三层架构。详细数据模型见 数据库表结构,接口规范见 REST API 文档,系统管理见 系统管理。
graph TB
subgraph Frontend["表现层 · Frontend"]
M["📱 移动端
/m 路径
Tailwind + Alpine.js"]
PC["🖥️ PC后台
/admin 路径
ECharts 统计图表"]
SP["📊 数据大屏
/screen 路径
轮播 + 实时刷新"]
end
subgraph Backend["业务层 · Backend (Flask)"]
API["REST API 路由
app.py"]
AUTH["认证 · 会话管理
RBAC 权限控制"]
MD["Markdown 渲染
Jinja2 模板引擎"]
end
subgraph Storage["数据层 · Storage"]
DB["SQLite 数据库
safe_upload.db"]
UPL["文件存储
uploads/ 目录"]
LOG["操作日志
审计留痕"]
end
M --> API
PC --> API
SP --> API
API --> AUTH
AUTH --> MD
MD --> DB
API --> DB
API --> UPL
API --> LOG
核心路由
graph LR
A["浏览器
192.168.11.70:5111"] --> B["Flask app.py"]
B --> C{路径判断}
C -->|/m| D["移动端模板
m/*.html"]
C -->|/admin| E["PC后台模板
admin/*.html"]
C -->|/screen| F["数据大屏
screen.html"]
C -->|/api| G["REST API
返回 JSON"]
C -->|/s| H["静态文件
uploads/"]
技术栈详情
| 技术 |
版本/说明 |
用途 |
| Python |
3.12 |
后端运行时 |
| Flask |
2.x |
Web 框架 |
| SQLite |
3.x |
数据库(无需额外安装) |
| Jinja2 |
模板引擎 |
服务端渲染 HTML |
| Tailwind CSS |
CDN 引入 |
响应式 UI 样式 |
| Alpine.js |
CDN 引入 |
轻量级前端交互 |
| ECharts |
CDN 引入 |
数据可视化图表 |
| hashlib (SHA-256) |
标准库 |
密码加密存储 |
项目文件结构
TK-Safe-UpLoad/
├── app.py # Flask 主应用(路由 + 业务逻辑,1296 行)
├── models.py # 数据层(SQLite CRUD + 统计查询,667 行)
├── config.py # 项目配置(端口/角色/风险等级等)
├── db_init.py # 数据库初始化脚本
├── start.sh # 启动脚本
├── requirements.txt # 依赖清单
├── data/ # SQLite 数据库文件目录
│ └── safe_upload.db # 主数据库
├── uploads/ # 上传文件存储
│ ├── photo/ # 隐患随手拍照片
│ ├── patrol/ # 巡查打卡照片
│ ├── report/ # 举报照片
│ ├── rectify/ # 整改照片
│ ├── training/ # 培训课件
│ └── general/ # 通用上传
├── static/ # 静态资源
├── templates/ # Jinja2 模板
│ ├── base.html # 基础布局
│ ├── login.html # 登录页
│ ├── portal.html # 统一门户
│ ├── screen.html # 数据大屏
│ ├── m/ # 移动端模板
│ │ ├── home.html # 移动端首页
│ │ ├── photo.html # 隐患随手拍
│ │ ├── patrol.html # 巡查打卡
│ │ ├── tasks.html # 我的任务
│ │ ├── report.html # 隐患举报
│ │ ├── training.html # 线上培训
│ │ ├── library.html # 资料查阅
│ │ ├── alerts.html # 预警中心
│ │ ├── me.html # 个人中心
│ │ └── tabbar.html # 底部导航栏
│ └── admin/ # PC 后台模板
│ ├── modules.html # 模块总览
│ ├── dashboard.html # 管理仪表盘
│ ├── table.html # 通用台账页
│ ├── hazards.html # 隐患列表
│ ├── risks.html # 风险点管理
│ ├── special.html # 专项整治
│ ├── training.html # 培训管理
│ ├── emergency.html # 应急管理
│ ├── permits.html # 作业许可
│ ├── reports.html # 统计报表
│ ├── users.html # 用户管理
│ ├── logs.html # 操作日志
│ ├── settings.html # 系统配置
│ └── ... # 其他模板
├── test_all.py # 完整测试套件
└── venv/ # Python 虚拟环境
部署架构
| 项目 |
说明 |
| 部署设备 |
TK-Server · 192.168.11.70 |
| 服务端口 |
5111 |
| 公网地址 |
http://119.145.17.34:5111/ |
| 内网地址 |
http://192.168.11.70:5111/ |
| 进程管理 |
Leon-Control 统一管理(服务 ID 18) |
| 自动备份 |
每日凌晨自动增量备份至内网 Gitea |
| 反向代理 |
Caddy 反代(leyon.top:8443/tk-safe/) |
安全机制
- 密码存储:SHA-256 单向哈希,数据库不存储明文密码
- 会话管理:Flask Session Cookie,HttpOnly + SameSite=Lax,7 天有效期
- 权限控制:基于角色的访问控制(RBAC),5 级角色体系
- 操作日志:全操作留痕,IP 地址记录,支持按模块/关键词检索
- 文件安全:上传文件重命名(时间戳+安全字符),禁止路径穿越
- CSRF 防护:SameSite Cookie 策略