完整的开发指南与使用说明书
版本:v1.0.0 | 更新日期:2026年5月
泡芙云(PicForm)的诞生源于一个真实的教育场景需求。在日常教学中,收集和管理学生的作业图片是一件既繁琐又重要的事情。无论是让学生拍摄解题过程、记录实验结果,还是提交手工作品,传统的微信群文件、邮箱附件等方式总是显得力不从心——文件散落各处、难以整理统计、无法统一查看。
随着人工智能技术的飞速发展,我开始探索如何将大模型(如 ChatGPT、Claude)与教育教学深度融合。在实践中我发现,让 AI 生成交互式网页来收集学生反馈是一个绝佳的方案,但现有的图片托管服务要么过于复杂,要么无法满足教育场景的特殊需求。
泡芙云是一款专为开发者和教育工作者设计的智能数据管理平台,提供两大核心功能:
核心价值在于:
泡芙云的设计遵循"简单、开放、实用"三大原则:
用户无需了解技术细节,只需三步即可开始使用:注册账号 → 创建任务 → 分享 task_code。整个流程设计得尽可能简洁,让非技术用户也能轻松上手。
提供标准 REST API,支持跨域访问,可以与任何前端框架、任何编程语言无缝对接。特别针对 AI 生成网页场景优化,提供完整的系统提示语模板。
每一个功能都来自真实的使用场景。任务数量限制、存储空间管理、图片批量操作等功能,都是根据实际教学需求精心设计的。
| 功能模块 | 设计说明 |
|---|---|
| 任务管理 | 图片存储任务最多3个,数据存储任务最多3个,超级会员无限制 |
| 图片存储 | 支持PNG/JPG/GIF/WebP格式,单文件最大10MB,存储空间100MB/任务 |
| 数据存储 | 支持任意JSON格式数据,自动解析格式化,存储空间50MB/任务 |
| API调用限制 | 图片API 200次/任务,数据API 10000次/任务,超级会员无限制 |
| 流量限制 | 图片流量200MB/任务,数据流量50MB/任务,超级会员无限制 |
| 数据查询 | 通过task_code查询所有上传的图片或数据,包含元数据 |
| 删除管理 | 支持单张/单条删除,任务创建者可管理自己任务下的所有数据 |
| AI集成 | 自动生成系统提示语,让AI生成的网页直接具备数据存储能力 |
| 超级会员 | 后台可设置超级会员,享受无限额使用,无任何限制 |
项目采用成熟稳定的技术栈,确保可靠性和可维护性:
┌─────────────────────────────────────────────────────────────┐
│ 前端层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 首页 │ │任务管理 │ │任务详情 │ │管理后台 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ └────────────┴────────────┴────────────┘ │
│ │ │
│ HTTP/HTTPS │
└─────────────────────────┼───────────────────────────────────┘
│
┌─────────────────────────┼───────────────────────────────────┐
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Flask 应用 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │
│ │ │认证路由 │ │任务路由 │ │图片路由 │ │管理路由│ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ └───┬────┘ │ │
│ │ │ │ │ │ │ │
│ │ └────────────┴────────────┴────────────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────────┴────────────────────────┐ │ │
│ │ │ 业务逻辑层 │ │ │
│ │ │ 用户管理 │ 任务管理 │ 图片处理 │ 权限控制 │ │ │
│ │ └──────────────────────┬────────────────────────┘ │ │
│ └─────────────────────────┼─────────────────────────────┘ │
│ │ │
│ 数据访问层 │
└────────────────────────────┼────────────────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SQLite │ │ 文件存储 │ │ 日志系统 │
│ 数据库 │ │ uploads │ │ │
└──────────┘ └──────────┘ └──────────┘
系统包含三个核心数据表:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| username | STRING(50) | 用户名,唯一 |
| STRING(100) | 邮箱,唯一 | |
| password_hash | STRING(255) | 密码哈希 |
| nickname | STRING(50) | 昵称 |
| organization | STRING(100) | 单位/组织 |
| role | STRING(20) | 角色:user/admin |
| is_vip | BOOLEAN | 是否为超级会员 |
| is_active | BOOLEAN | 账号状态 |
| created_at | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| user_id | INTEGER | 所属用户ID,外键 |
| task_code | STRING(12) | 任务代码,唯一 |
| task_name | STRING(100) | 任务名称 |
| task_type | STRING(10) | 任务类型:image/data |
| description | TEXT | 任务描述 |
| prompt | TEXT | 自定义AI提示语 |
| api_calls | INTEGER | API调用次数 |
| api_traffic | INTEGER | API流量(字节) |
| created_at | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| task_id | INTEGER | 所属任务ID,外键 |
| filename | STRING(255) | 文件名 |
| original_name | STRING(255) | 原始文件名 |
| file_path | STRING(500) | 存储路径 |
| file_size | INTEGER | 文件大小(字节) |
| mime_type | STRING(50) | MIME类型 |
| uploader_name | STRING(100) | 上传者名称 |
| uploader_info | TEXT | 上传者附加信息 |
| created_at | DATETIME | 上传时间 |
picpuff/
├── app/ # 应用核心目录
│ ├── __init__.py # 应用工厂
│ ├── config.py # 配置文件
│ ├── models/ # 数据模型
│ │ ├── __init__.py
│ │ ├── user.py # 用户模型
│ │ ├── task.py # 任务模型
│ │ └── image.py # 图片模型
│ ├── routes/ # 路由模块
│ │ ├── __init__.py
│ │ ├── auth.py # 认证相关
│ │ ├── task.py # 任务管理
│ │ ├── image.py # 图片上传
│ │ └── admin.py # 管理后台
│ └── utils/ # 工具函数
│ ├── __init__.py
│ ├── response.py # 响应格式化
│ └── token.py # Token处理
├── static/ # 静态资源
│ ├── css/ # 样式文件
│ ├── js/ # JavaScript
│ └── logo.png # Logo图片
├── templates/ # 模板文件
│ ├── base.html # 基础模板
│ ├── index.html # 首页
│ ├── tasks.html # 任务管理
│ ├── task_detail.html # 任务详情
│ ├── settings.html # 个人设置
│ ├── admin.html # 管理后台
│ └── docs.html # 开发文档
├── uploads/ # 上传文件存储
├── instance/ # 数据库文件
├── run.py # 启动脚本
├── requirements.txt # 依赖列表
└── README.md # 项目说明
git clone https://github.com/your-repo/picform.git cd picform
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate
pip install -r requirements.txt
python init_admin.py
默认管理员账号:admin / admin123
python run.py
访问 http://localhost:5000 开始使用
Base URL:http://your-domain.com/api
认证方式:Bearer Token (JWT)
内容类型:application/json
说明:用户注册
请求参数:
{
"username": "用户名(至少3个字符)",
"email": "邮箱地址",
"password": "密码(至少6个字符)"
}
响应示例:
{
"success": true,
"message": "注册成功",
"data": {
"user_id": 1,
"username": "testuser"
}
}
说明:用户登录
请求参数:
{
"username": "用户名",
"password": "密码"
}
响应示例:
{
"success": true,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"user_id": 1,
"username": "testuser",
"role": "user"
}
}
}
说明:创建新任务(需要认证)
请求头:
Authorization: Bearer {token}
请求参数:
{
"task_name": "任务名称",
"task_type": "image或data(默认image)",
"description": "任务描述(可选)",
"prompt": "自定义AI提示语(可选)"
}
任务类型说明:
说明:获取当前用户的所有任务(需要认证)
说明:获取任务详情(需要认证)
说明:删除任务(需要认证,仅限任务所有者)
说明:上传图片到指定任务(无需认证)
请求类型:multipart/form-data
请求参数:
file: 图片文件 uploader_name: 上传者名称(可选) uploader_info: 上传者附加信息(可选,JSON格式)
响应示例:
{
"success": true,
"message": "上传成功",
"data": {
"image_id": 1,
"url": "/uploads/xxx/image.png",
"thumbnail_url": "/uploads/xxx/thumb_image.png"
}
}
说明:获取任务下的所有图片(无需认证)
响应示例:
{
"success": true,
"data": {
"task": {
"task_name": "数学作业",
"task_code": "abc123"
},
"images": [
{
"image_id": 1,
"url": "http://...",
"uploader_name": "张三",
"created_at": "2026-05-01 10:00:00"
}
],
"total": 1
}
}
说明:删除图片(无需认证)
说明:提交JSON数据到指定任务(无需认证,仅限数据类型任务)
请求类型:application/json
请求示例:
{
"name": "张三",
"score": 95,
"comment": "完成得很好"
}
响应示例:
{
"message": "数据提交成功",
"record_id": 1,
"data_size": 64,
"query_url": "/api/task/abc123/data"
}
说明:获取任务下的所有数据记录(无需认证,仅限数据类型任务)
查询参数:
page: 页码(默认1) per_page: 每页数量(默认20,最大100)
响应示例:
{
"task_name": "学生成绩收集",
"task_code": "abc123",
"total_records": 50,
"page": 1,
"per_page": 20,
"total_pages": 3,
"records": [
{
"id": 1,
"data_content": "{\"name\":\"张三\",\"score\":95}",
"data_size": 64,
"created_at": "2026-05-01 10:00:00"
}
]
}
说明:获取单条数据记录(无需认证)
说明:删除数据记录(需要认证,仅限任务所有者)
| 限制项 | 图片任务 | 数据任务 | 超级会员 |
|---|---|---|---|
| 任务数量 | 3个 | 3个 | 无限制 |
| 存储空间 | 100MB/任务 | 50MB/任务 | 无限制 |
| API调用次数 | 200次/任务 | 10000次/任务 | 无限制 |
| API流量 | 200MB/任务 | 50MB/任务 | 无限制 |
提示:普通用户可以通过申请加额来获得更多资源,管理员可以在后台设置用户为超级会员。
// 上传图片
async function uploadImage(taskCode, file) {
const formData = new FormData();
formData.append('file', file);
formData.append('uploader_name', '学生姓名');
const response = await fetch(
`http://your-server.com/api/upload/${taskCode}`,
{
method: 'POST',
body: formData
}
);
return response.json();
}
// 提交数据
async function submitData(taskCode, data) {
const response = await fetch(
`http://your-server.com/api/data/${taskCode}`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}
);
return response.json();
}
// 获取图片列表
async function getImages(taskCode) {
const response = await fetch(
`http://your-server.com/api/task/${taskCode}/images`
);
return response.json();
}
// 获取数据列表
async function getDataList(taskCode, page = 1) {
const response = await fetch(
`http://your-server.com/api/task/${taskCode}/data?page=${page}`
);
return response.json();
}
);
return response.json();
}
<form id="uploadForm">
<input type="file" name="file" accept="image/*" required>
<input type="text" name="uploader_name" placeholder="您的姓名">
<button type="submit">上传</button>
</form>
<script>
document.getElementById('uploadForm').addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(e.target);
const response = await fetch(
'http://your-server.com/api/upload/YOUR_TASK_CODE',
{ method: 'POST', body: formData }
);
const result = await response.json();
if (result.success) {
alert('上传成功!');
}
});
</script>
将以下提示语提供给 ChatGPT、Claude 等大模型,即可生成支持图片上传的交互页面:
你是一个专业的网页开发者。请帮我创建一个图片上传网页,要求如下:
## 功能需求
1. 页面标题和说明文字
2. 图片上传表单(支持拖拽上传)
3. 上传者姓名输入框
4. 上传进度显示
5. 上传成功/失败提示
## API 接口信息
- 上传接口:POST http://your-server.com/api/upload/{task_code}
- 查询接口:GET http://your-server.com/api/task/{task_code}/images
- 删除接口:DELETE http://your-server.com/api/images/{image_id}
## 上传参数
- file: 图片文件(必需)
- uploader_name: 上传者姓名(可选)
## 技术要求
- 使用原生 HTML/CSS/JavaScript
- 响应式设计,支持移动端
- 美观的 UI 设计
- 完善的错误处理
请生成完整的单页 HTML 代码。
让 AI 生成一个作业提交页面,学生可以上传解题过程照片,并填写姓名、学号等信息。
让 AI 生成一个实时照片墙页面,参与者上传照片后自动显示在页面上。
让 AI 生成一个作品提交页面,支持填写作品名称、创作说明等信息。
pip install -r requirements.txtserver {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /uploads/ {
alias /path/to/picform/uploads/;
}
}
gunicorn -w 4 -b 127.0.0.1:5000 run:app
A: 目前需要联系管理员重置密码。后续版本将添加密码找回功能。
A: 请检查:1) 图片格式是否支持;2) 文件大小是否超过10MB;3) 任务存储空间是否已满。
A: 每个用户默认最多3个任务。如需更多,可以修改 app/models/user.py 中的 MAX_TASKS 常量。
A: 数据库文件位于 instance/picform.db,上传的图片位于 uploads/ 目录。
A: 备份 instance/ 和 uploads/ 两个目录即可。
由 Cit 独立开发维护
编程爱好者 · 教育创新者
如有问题或建议,欢迎通过以下方式联系:
本项目采用 MIT 协议开源,欢迎学习和二次开发。