Flask MVC Pepper Schedule 项目文档
目录
Flask MVC Pepper Schedule 项目文档
1. 项目概述
- 项目名称: Flask MVC Pepper Schedule
- 版本: 1.0(根据代码推测,无明确版本号)
- 描述: 一个基于 Flask 的 Web 应用程序,用于用户注册登录、日程管理、邮件与短信提醒、文件上传及管理员后台管理。项目采用 MVC 架构,通过 Blueprint 模块化设计,支持 RESTful API 和前端模板渲染。
- 目标用户: 需要日程管理和提醒功能的用户,以及需要管理用户和事件的管理员。
- 当前日期: 2025年3月6日(基于您的输入)
2. 功能模块
2.1 用户管理
- 功能:
- 注册: 用户通过邮箱、用户名、电话和密码注册账户。
- 登录: 使用邮箱和密码登录,支持“记住我”功能。
- 登出: 注销当前用户会话。
- 个人信息: 查看用户名、邮箱和电话。
- 路由:
/register
(GET/POST): 注册页面/login
(GET/POST): 登录页面/logout
(GET): 登出/profile
(GET/POST): 个人信息页面
- 依赖:
Flask-Login
,Flask-WTF
,werkzeug.security
2.2 事件管理
- 功能:
- 创建事件: 输入标题、时间、地点、描述、重复类型和提醒设置。
- 查看事件: 显示今天事件和过期事件,支持重复事件动态生成。
- 编辑/删除事件: 修改或删除已有事件,仅限创建者操作。
- 日历视图: 显示所有事件。
- RESTful API: 获取用户事件数据。
- 路由:
/event_list
(GET): 事件列表/create_event
(GET/POST): 创建事件/delete_event/<int:event_id>
(POST): 删除事件/edit_event/<int:event_id>
(GET/POST): 编辑事件/calendar
(GET): 日历视图
- API:
GET /event/<user_id>
: 获取用户事件
- 依赖:
Flask-SQLAlchemy
,Flask-WTF
2.3 提醒功能
- 功能:
- 邮件提醒: 发送 HTML 格式的提醒邮件,记录发送历史。
- 短信提醒: 使用阿里云 SMS 服务发送短信。
- 浏览器提醒: 定时检查事件并打印提醒日志(未实现前端通知)。
- 路由:
/send_email
(GET/POST): 发送邮件/email_history
(GET): 查看邮件历史/delete_email_history/<int:email_history_id>
(POST): 删除邮件历史
- API:
POST /email
: 发送邮件POST /sms
: 发送短信
- 依赖:
Flask-Mail
,Flask-Scheduler
,aliyunsdkdysmsapi
2.4 文件上传与相册
- 功能:
- 上传文件: 支持图片上传,文件按时间戳命名。
- 相册: 显示上传的图片列表。
- 路由:
/album_list
(GET): 相册页面
- API:
POST /upload
: 上传文件
- 依赖:
Flask-Uploads
2.5 管理后台
- 功能:
- 管理
User
,Event
,EmailHistory
表数据,仅限管理员访问。 - 支持搜索、排序和关联字段显示。
- 管理
- 依赖:
Flask-Admin
2.6 首页与关于
- 功能:
- 首页: 显示用户的事件列表。
- 关于: 静态页面。
- 路由:
/
(GET): 首页/about
(GET): 关于页面
3. 技术栈
- 后端框架: Flask
- 数据库: MySQL (via SQLAlchemy)
- 用户认证: Flask-Login
- 表单验证: Flask-WTF
- 邮件服务: Flask-Mail (QQ SMTP)
- 文件上传: Flask-Uploads
- 定时任务: Flask-Scheduler
- 管理后台: Flask-Admin
- RESTful API: Flask-RESTful
- 短信服务: 阿里云 SMS SDK
- 日志: Python
logging
- 环境变量:
python-dotenv
4. 安装与运行指南
4.1 环境要求
- Python 3.6+
- MySQL 数据库
- 阿里云 SMS 服务账号(可选)
- QQ 邮箱 SMTP 配置
4.2 安装步骤
- 克隆项目:
1 2
git clone <repository_url> cd flask-mvc-pepper-schedule
- 创建虚拟环境:
1 2 3
python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows
- 安装依赖:
注: 项目未提供
1
pip install -r requirements.txt
requirements.txt
,建议手动安装以下库:1
flask flask-sqlalchemy flask-login flask-mail flask-uploads flask-admin flask-restful flask-wtf flask-scheduler pymysql python-dotenv aliyunsdkcore aliyunsdkdysmsapi werkzeug
- 配置环境变量:
- 创建
.env
文件,添加以下内容:1 2 3 4
MAIL_PASSWORD=<your_qq_email_password> ALIYUN_ACCESS_KEY_ID=<your_aliyun_access_key_id> ALIYUN_ACCESS_KEY_SECRET=<your_aliyun_access_key_secret> API_TOKEN=<your_api_token>
- 创建
- 初始化数据库:
- 配置
SQLALCHEMY_DATABASE_URI
(默认mysql+pymysql://root:123456@localhost/schedule
) - 运行以下命令创建表:
1 2 3 4
from app import db, create_app app = create_app() with app.app_context(): db.create_all()
- 配置
- 运行应用:
1
python main.py
- 默认访问:
http://127.0.0.1:5000
- 默认访问:
5. API 说明
5.1 事件资源 (EventResource
)
- GET /event/<user_id>:
- 描述: 获取指定用户的事件。
- 参数:
user_id
(int) - Header:
Authorization: <API_TOKEN>
- 返回: JSON
1 2 3 4
{ "events": [{"id": 1, "title": "Meeting", ...}], "expired_events": [{"id": 2, "title": "Old Event", ...}] }
5.2 消息资源 (MessageResource
)
- POST /message:
- 描述: 接收消息并存储。
- Body:
{"message": "test"}
- 返回: JSON
1
{"message": "test"}
5.3 邮件资源 (EmailResource
)
- POST /email:
- 描述: 发送邮件。
- Header:
Authorization: <API_TOKEN>
- Body:
{"title": "Test", "content": "Hello", "recipients": ["user@example.com"]}
- 返回: JSON
1
{"message": "邮件发送成功"}
5.4 短信资源 (SMSResource
)
- POST /sms:
- 描述: 发送短信。
- Header:
Authorization: <API_TOKEN>
- Body:
{"phone_number": "12345678901", "message": "Hello"}
- 返回: JSON
1
{"status": "success", "result": {...}}
5.5 文件上传资源 (FileUploadResource
)
- POST /upload:
- 描述: 上传图片文件。
- Body: Form-data (
photo
: 文件) - 返回: JSON
1
{"status": "success", "file_url": "/static/uploads/images/2025/03/06/1234567890.jpg"}
6. 数据库设计
6.1 User 表
- 表名:
users
- 字段:
id
: Integer, 主键name
: String(255), 非空email
: String(255), 非空,唯一phone
: String(255), 非空password_hash
: String(255), 非空is_admin
: Boolean, 默认 False
- 关系: 一对多 (
Event
,EmailHistory
)
6.2 Event 表
- 表名:
events
- 字段:
id
: Integer, 主键user_id
: Integer, 外键 (users.id
)title
: String(255), 非空start_date
: Date, 非空event_time
: Timeend_date
: Datelocation
: String(255)description
: String(255)repeat
: String(255), 默认 “none”reminder_type
: String(255), 默认 “none”reminder_time
: Float, 默认 0
- 关系: 多对一 (
User
)
6.3 EmailHistory 表
- 表名:
email_history
- 字段:
id
: Integer, 主键user_id
: Integer, 外键 (users.id
)title
: String(255), 非空content
: Text, 非空recipients
: String(255), 非空sent_at
: DateTime, 默认当前时间
- 关系: 多对一 (
User
)
7. 潜在改进建议
7.1 功能完善
- 添加密码重置和用户个人信息编辑功能。
- 增强重复事件逻辑,支持更复杂的规则(如“每月的第几天”)。
- 实现浏览器提醒的前端通知(使用 WebSocket 或推送服务)。
7.2 性能优化
- RESTful API 添加分页和缓存机制。
- 使用分布式任务队列(如 Celery)优化定时任务。
7.3 用户体验
- 添加事件搜索和过滤功能。
- 相册支持分类、删除和预览。
7.4 安全性
- 限制上传文件的大小和类型。
- API 添加速率限制和详细错误码。
7.5 部署
- 配置生产环境(如 Gunicorn + Nginx)。
- 生成 API 文档(如 Swagger)。