309 lines
9.0 KiB
Markdown
309 lines
9.0 KiB
Markdown
# Python Flask 订餐系统
|
||
|
||
一个基于 Flask 框架开发的在线订餐管理系统,包含完整的后台管理平台和小程序端 API 接口。系统采用 MVC 架构设计,支持食品管理、订单处理、会员管理、财务管理等核心业务功能。
|
||
|
||
## 📋 项目概述
|
||
|
||
本项目是一个功能完善的在线订餐系统,主要面向餐饮行业,提供从商品管理、订单处理到数据统计的完整解决方案。系统分为后台管理端和小程序端两部分,后台管理端用于商家管理商品、订单和会员信息,小程序端为用户提供在线订餐服务。
|
||
|
||
## ✨ 功能特性
|
||
|
||
### 后台管理功能
|
||
- **账号管理**:管理员账号的创建、编辑和权限管理
|
||
- **食品管理**:食品分类、商品信息、库存管理、价格设置
|
||
- **会员管理**:会员信息查看、编辑、状态管理、评论管理
|
||
- **订单管理**:订单查询、状态跟踪、订单详情查看
|
||
- **财务管理**:订单统计、收入分析、财务报表
|
||
- **数据统计**:每日数据统计、食品销售统计、会员统计、站点统计
|
||
- **文件上传**:支持图片上传和管理
|
||
|
||
### 小程序端 API
|
||
- **食品展示**:食品列表、分类查询、搜索功能
|
||
- **购物车**:商品加入购物车、数量修改、结算
|
||
- **订单管理**:订单创建、支付、订单列表、订单详情
|
||
- **会员功能**:会员注册、登录、个人信息管理、地址管理
|
||
- **评论系统**:商品评论、评分功能
|
||
|
||
### 系统功能
|
||
- **权限控制**:基于 Cookie 的认证机制,支持登录拦截
|
||
- **日志记录**:访问日志、错误日志记录
|
||
- **定时任务**:支持定时统计任务、队列处理任务
|
||
- **图片管理**:图片上传、存储和管理
|
||
|
||
## 🛠 技术栈
|
||
|
||
### 后端技术
|
||
- **框架**:Flask 2.3.3
|
||
- **ORM**:Flask-SQLAlchemy 3.1.1 + SQLAlchemy 2.0.45
|
||
- **数据库**:MySQL 5.7+ (使用 PyMySQL 连接)
|
||
- **任务调度**:Flask CLI 命令系统
|
||
- **服务器**:uWSGI (生产环境)
|
||
|
||
### 前端技术
|
||
- **模板引擎**:Jinja2
|
||
- **UI框架**:Bootstrap
|
||
- **JavaScript**:jQuery
|
||
- **富文本编辑器**:UEditor
|
||
|
||
### 部署环境
|
||
- **操作系统**:Linux
|
||
- **Web服务器**:Nginx
|
||
- **Python版本**:Python 3.9+
|
||
|
||
## 🏗 系统架构
|
||
|
||
```
|
||
┌─────────────┐
|
||
│ 小程序端 │
|
||
└──────┬──────┘
|
||
│
|
||
│ HTTP API
|
||
▼
|
||
┌─────────────────┐
|
||
│ Nginx 反向代理 │
|
||
└──────┬──────────┘
|
||
│
|
||
├──────────┐
|
||
│ │
|
||
▼ ▼
|
||
┌──────────┐ ┌──────────┐
|
||
│ Flask应用 │ │ 静态资源 │
|
||
└────┬─────┘ └──────────┘
|
||
│
|
||
▼
|
||
┌──────────┐
|
||
│ MySQL │
|
||
└──────────┘
|
||
```
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
order/
|
||
├── application.py # Flask应用主入口
|
||
├── manager.py # 管理脚本(启动服务器、定时任务)
|
||
├── www.py # 路由注册和拦截器配置
|
||
├── requirements.txt # Python依赖清单
|
||
├── uwsgi.ini # uWSGI配置文件
|
||
├── nginx_order.conf # Nginx配置文件
|
||
│
|
||
├── config/ # 配置文件目录
|
||
│ ├── base_setting.py # 基础配置
|
||
│ ├── local_setting.py # 本地开发配置
|
||
│ └── production_setting.py # 生产环境配置
|
||
│
|
||
├── common/ # 公共模块
|
||
│ ├── libs/ # 工具类库
|
||
│ │ ├── Helper.py # 通用工具函数
|
||
│ │ ├── LogService.py # 日志服务
|
||
│ │ ├── UploadService.py # 文件上传服务
|
||
│ │ └── UrlManager.py # URL管理
|
||
│ └── models/ # 数据模型
|
||
│ ├── User.py # 用户模型
|
||
│ ├── member/ # 会员相关模型
|
||
│ ├── food/ # 食品相关模型
|
||
│ └── pay/ # 支付相关模型
|
||
│
|
||
├── web/ # Web应用模块
|
||
│ ├── controllers/ # 控制器
|
||
│ │ ├── user/ # 用户管理
|
||
│ │ ├── food/ # 食品管理
|
||
│ │ ├── member/ # 会员管理
|
||
│ │ ├── finance/ # 财务管理
|
||
│ │ ├── stat/ # 数据统计
|
||
│ │ └── api/ # API接口
|
||
│ ├── templates/ # 模板文件
|
||
│ ├── static/ # 静态资源
|
||
│ └── interceptors/ # 拦截器
|
||
│
|
||
├── jobs/ # 定时任务
|
||
│ ├── tasks/ # 任务脚本
|
||
│ └── launcher.py # 任务启动器
|
||
│
|
||
└── 数据库文件/ # 数据库初始化脚本
|
||
├── food.sql # 数据库表结构
|
||
└── 后台初始账户.sql # 初始管理员账户
|
||
```
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 环境要求
|
||
- Linux 系统
|
||
- Python 3.9+
|
||
- MySQL 5.7+
|
||
- Nginx (生产环境)
|
||
|
||
### 安装步骤
|
||
|
||
1. **克隆项目**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd order
|
||
```
|
||
|
||
2. **创建虚拟环境**
|
||
```bash
|
||
python3 -m venv venv_linux
|
||
source venv_linux/bin/activate
|
||
```
|
||
|
||
3. **安装依赖**
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
4. **配置数据库**
|
||
编辑 `config/base_setting.py` 或 `config/production_setting.py`,配置数据库连接信息:
|
||
```python
|
||
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:password@host:port/food_db?charset=utf8mb4'
|
||
```
|
||
|
||
5. **初始化数据库**
|
||
```bash
|
||
# 创建数据库
|
||
mysql -u root -p
|
||
CREATE DATABASE food_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
# 导入表结构
|
||
mysql -u root -p food_db < 数据库文件/food.sql
|
||
# 或导入完整数据
|
||
mysql -u root -p food_db < food1.sql
|
||
```
|
||
|
||
6. **创建管理员账户**
|
||
```bash
|
||
# 使用Python脚本创建(参考项目中的创建脚本)
|
||
# 默认账户:admin / 123456
|
||
```
|
||
|
||
### 启动服务
|
||
|
||
#### 开发环境
|
||
```bash
|
||
export ops_config=local
|
||
python manager.py runserver
|
||
```
|
||
访问地址:http://127.0.0.1:8032
|
||
|
||
#### 生产环境
|
||
```bash
|
||
export ops_config=production
|
||
python manager.py runserver
|
||
```
|
||
|
||
或使用 uWSGI:
|
||
```bash
|
||
uwsgi --ini uwsgi.ini
|
||
```
|
||
|
||
#### 配置 Nginx
|
||
```bash
|
||
# 复制nginx配置文件
|
||
sudo cp nginx_order.conf /etc/nginx/conf.d/order.conf
|
||
|
||
# 测试配置
|
||
sudo nginx -t
|
||
|
||
# 重新加载
|
||
sudo nginx -s reload
|
||
```
|
||
|
||
## 📖 使用说明
|
||
|
||
### 后台管理
|
||
|
||
1. **登录系统**
|
||
- 访问:http://your-domain/user/login
|
||
- 默认账号:admin
|
||
- 默认密码:123456
|
||
|
||
2. **主要功能模块**
|
||
- **仪表盘**:查看系统概览和统计数据
|
||
- **账号管理**:管理后台管理员账号
|
||
- **美餐管理**:管理食品分类和商品信息
|
||
- **会员列表**:查看和管理会员信息
|
||
- **财务管理**:查看订单和财务数据
|
||
- **统计管理**:查看各类统计数据
|
||
|
||
### API 接口
|
||
|
||
小程序端通过以下 API 接口访问:
|
||
- `/api/food/index` - 食品列表
|
||
- `/api/food/search` - 食品搜索
|
||
- `/api/cart/index` - 购物车
|
||
- `/api/order/create` - 创建订单
|
||
- `/api/member/login` - 会员登录
|
||
- `/api/my/order` - 我的订单
|
||
|
||
### 定时任务
|
||
|
||
系统支持定时任务,使用 Flask CLI 命令执行:
|
||
```bash
|
||
# 执行统计任务
|
||
python manager.py runjob -m stat/daily -a member
|
||
python manager.py runjob -m stat/daily -a food
|
||
python manager.py runjob -m stat/daily -a site
|
||
```
|
||
|
||
## 🔧 配置说明
|
||
|
||
### 环境变量
|
||
- `ops_config=local` - 使用本地开发配置
|
||
- `ops_config=production` - 使用生产环境配置
|
||
|
||
### 主要配置项
|
||
- **数据库连接**:在配置文件中设置 `SQLALCHEMY_DATABASE_URI`
|
||
- **应用域名**:在 `APP['domain']` 中配置
|
||
- **上传路径**:在 `UPLOAD` 配置中设置
|
||
- **服务器端口**:在 `SERVER_PORT` 中配置(默认:8032)
|
||
|
||
## 📝 生成 ORM 模型
|
||
|
||
使用 flask-sqlacodegen 自动生成模型:
|
||
```bash
|
||
flask-sqlacodegen 'mysql://root:password@host:port/food_db' \
|
||
--tables table_name \
|
||
--outfile "common/models/path/ModelName.py" \
|
||
--flask
|
||
```
|
||
|
||
**注意**:生成后需要修改模型文件,将 `from flask_sqlalchemy import SQLAlchemy` 改为 `from application import db`
|
||
|
||
## 🗄 数据库设计
|
||
|
||
### 主要数据表
|
||
- **user** - 管理员用户表
|
||
- **member** - 会员表
|
||
- **food** - 食品表
|
||
- **food_cat** - 食品分类表
|
||
- **pay_order** - 订单表
|
||
- **pay_order_item** - 订单明细表
|
||
- **member_cart** - 购物车表
|
||
- **member_comments** - 评论表
|
||
- **app_access_log** - 访问日志表
|
||
- **app_error_log** - 错误日志表
|
||
- **stat_daily_*** - 统计数据表
|
||
|
||
## 🔒 安全说明
|
||
|
||
- 密码使用 MD5 + Salt 加密存储
|
||
- 支持 Cookie 认证机制
|
||
- 访问日志和错误日志记录
|
||
- 支持权限拦截和验证
|
||
|
||
## 📄 许可证
|
||
|
||
本项目仅供学习和参考使用。
|
||
|
||
## 👥 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request。
|
||
|
||
## 📞 联系方式
|
||
|
||
如有问题,请通过 Issue 反馈。
|
||
|
||
---
|
||
|
||
**注意**:本项目仅支持 Linux 环境运行,已移除所有 Windows 相关配置和脚本。
|