Files
order/README.md

309 lines
9.0 KiB
Markdown
Raw Normal View History

2026-01-09 18:15:23 +08:00
# 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 相关配置和脚本。