7c156813c5f22ebb3d31c6844c6d792129fc828a
个人资料库 (Personal Resource Library)
基于 Flask + MySQL 的个人多媒体资料管理系统。支持文本、图片、音频、视频的上传、URL 下载、磁力下载及在线预览。
功能特性
| 功能 | 说明 |
|---|---|
| 权限管理 | 管理员 / 普通用户两级权限,登录保护所有页面 |
| 资源管理 | 文本、图片、音频、视频四类资源 |
| 本地上传 | 拖拽或点击上传,带实时进度条 |
| URL 下载 | 后台异步下载远程文件,实时轮询进度 |
| 磁力下载 | 调用 aria2c 在后台下载磁力链接资源 |
| 在线预览 | 文本高亮/图片查看/HTML5 音视频播放器 |
| 安全 | bcrypt 加盐哈希密码、CSRF 防护、SQL 注入防护、XSS 防护 |
快速开始
1. 环境准备
- Python 3.10+
- MySQL 8.0+
- (可选)aria2c — 用于磁力下载
2. 安装依赖
pip install -r requirements.txt
3. 配置数据库
创建 MySQL 数据库:
CREATE DATABASE resource_library CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
复制并修改环境配置:
cp .env.example .env
编辑 .env:
SECRET_KEY=your-random-secret-key
DATABASE_URL=mysql+pymysql://root:yourpassword@localhost:3306/resource_library
4. 初始化数据库
python init_db.py
# 自定义管理员账号:
# python init_db.py --admin-user admin --admin-pass YourPass123 --admin-email admin@example.com
5. 启动服务
python run.py
访问 http://localhost:5000,使用默认管理员账号登录:
- 用户名:
admin - 密码:
Admin@123456
项目结构
.
├── app/
│ ├── models/ # 数据库模型 (User, Resource, SystemSetting)
│ ├── routes/ # 路由蓝图 (auth, admin, resources, main)
│ ├── utils/ # 工具模块 (decorators, file_handler, downloader)
│ ├── static/ # 静态文件 (CSS, JS, 上传文件)
│ │ └── uploads/ # 用户上传文件目录(自动创建)
│ └── templates/ # Jinja2 模板
├── config.py # 配置类
├── init_db.py # 数据库初始化脚本
├── run.py # 启动入口
└── requirements.txt
安全设计
| 安全措施 | 实现方式 |
|---|---|
| 密码存储 | Flask-Bcrypt(bcrypt 自动加盐哈希) |
| CSRF 防护 | Flask-WTF CSRFProtect,所有 POST 请求验证 token |
| 权限控制 | Flask-Login @login_required + 自定义 @admin_required |
| SQL 注入 | SQLAlchemy ORM 参数化查询 |
| XSS 防护 | Jinja2 自动转义 HTML 输出 |
| 文件安全 | werkzeug.secure_filename + 扩展名白名单验证 |
| Session | HTTPOnly Cookie + SameSite=Lax |
磁力下载说明
磁力下载需要在服务器上安装 aria2c:
- Linux/macOS:
apt install aria2/brew install aria2 - Windows:从 aria2 Releases 下载并加入 PATH
Description