XD-GO 是一款基于 Python Flask 框架的在线购物网站,主要面向个人用户。
- 买家购物流程:用户注册、登录、浏览商品、加入购物车、发起订单、支付、查看订单列表与状态(TODO: 评价商品)。
- 卖家管理流程:商家注册、登录、发布商品、管理商品、管理订单(TODO: 处理评价)。
- 前后端分离:前端和后端通过 API 完全分离开发,后端提供 RESTful API,前端通过 Axios 或 Fetch 调用。
- 功能模块化:每个团队专注于自己模块的开发,避免代码冲突和重复工作。
- 状态管理:Vuex 用于管理全局状态,特别是用户认证、购物车、订单等跨页面的数据。
- 接口文档:通过工具APIFOX为每个模块生成接口文档,确保各小组之间的 API 交互准确无误。
- 代码版本管理:使用 Git 进行代码管理,各小组分别在不同分支上开发,最后合并到主分支。
-
开发环境 后端: Python + Flask 前端: Javascript + Vue 数据库:MySQL 开发平台:Pycharm + vscode 运行环境:Windows 10/11
-
关键技术 前端技术栈: Vue3;状态管理Pinia; 路由管理VueRouter; 组件库 ElementPlus; AJAX请求axios; CSS预处理器 SCSS; 构建工具Vite; 后端技术栈: Python3.10+(pip版本与python对应);核心框架Flask;数据库连接flask_SQLAlchemy
- 后端部署:
- 安装 Python 3.11 环境。
- 安装依赖
pip install -r requirements.txt。 - 修改配置文件
config.py与app.py中的数据库配置,将数据库的root密码修改为自己设置的密码。 - 运行
generate_test_data.py脚本生成测试数据。 - 运行
flask run启动服务。 - 代码运行后自动生成数据库
xd_go,并自动创建数据表。
- 前端部署:
- 安装node环境以及npm包管理器,完成之后进入frontend项目根目录
- 安装依赖 npm i
- 运行项目 npm run dev
我们采用 MySQL 作为数据库,并设计了如下数据模型。
用户表存储所有用户信息,包括买家、卖家和管理员。
CREATE TABLE user (
userid VARCHAR(64) PRIMARY KEY, -- 用户ID
username VARCHAR(50) NOT NULL, -- 用户名
password VARCHAR(100) NOT NULL, -- 密码
email VARCHAR(100) NOT NULL, -- 邮箱
phone VARCHAR(20), -- 电话
role ENUM('buyer', 'seller', 'admin') NOT NULL, -- 用户角色(买家、卖家、管理员)
shipping_address VARCHAR(200), -- 收货地址
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);商品分类信息。
CREATE TABLE category (
catid VARCHAR(64) PRIMARY KEY, -- 分类ID
name VARCHAR(100) NOT NULL, -- 分类名称
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);商品表存储商品的详细信息,包括分类、库存、价格、图片等。此表的卖家由 userid 关联,而不再使用商店表 (shopid)。
CREATE TABLE product (
proid VARCHAR(64) PRIMARY KEY, -- 商品ID
name VARCHAR(100) NOT NULL, -- 商品名称
price DECIMAL(10, 2) NOT NULL, -- 商品价格
stock INT NOT NULL, -- 商品库存
description TEXT, -- 商品描述
catid VARCHAR(64), -- 商品分类ID
userid VARCHAR(64), -- 卖家ID(关联用户表)
image STRING, -- 商品图片的URL
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
FOREIGN KEY (catid) REFERENCES category(catid), -- 外键关联分类表
FOREIGN KEY (userid) REFERENCES user(userid) -- 外键关联用户表
);存储买家购物车的信息。
CREATE TABLE cart (
carid VARCHAR(64) PRIMARY KEY, -- 购物车ID
userid VARCHAR(64), -- 用户ID
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
FOREIGN KEY (userid) REFERENCES user(userid) -- 外键关联用户表
);存储购物车中每个商品的详细信息。
CREATE TABLE cartitem (
id INT PRIMARY KEY AUTO_INCREMENT, -- 购物车商品ID
carid VARCHAR(64), -- 购物车ID
proid VARCHAR(64), -- 商品ID
quantity INT, -- 商品数量
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
FOREIGN KEY (carid) REFERENCES cart(carid), -- 外键关联购物车表
FOREIGN KEY (proid) REFERENCES product(proid) -- 外键关联商品表
);订单表存储买家所创建的订单。此表使用 sellerid 来关联卖家,而不再使用商店表 (shopid)。
CREATE TABLE `order` (
orderid VARCHAR(64) PRIMARY KEY, -- 订单ID
userid VARCHAR(64), -- 买家ID
sellerid VARCHAR(64), -- 卖家ID
status ENUM('pending', 'shipped', 'delivered') DEFAULT 'pending', -- 订单状态(待发货、已发货、已完成)
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
FOREIGN KEY (userid) REFERENCES user(userid), -- 外键关联用户表
FOREIGN KEY (sellerid) REFERENCES user(userid) -- 外键关联卖家
);存储每个订单包含的商品信息。
CREATE TABLE orderitem (
id INT PRIMARY KEY AUTO_INCREMENT, -- 订单商品ID
orderid VARCHAR(64), -- 订单ID
proid VARCHAR(64), -- 商品ID
productname VARCHAR(100), -- 商品名称
price DECIMAL(10, 2), -- 商品价格
quantity INT, -- 商品数量
createtime DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updatetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
FOREIGN KEY (orderid) REFERENCES `order`(orderid), -- 外键关联订单表
FOREIGN KEY (proid) REFERENCES product(proid) -- 外键关联商品表
);- 用户表(User):包含买家、卖家和管理员信息。
- 商品分类表(Category):用于商品的分类管理。
- 商品表(Product):包含商品的详细信息,包括名称、价格、库存、图片等,且现在通过
userid关联卖家。 - 购物车表(Cart):买家的购物车信息。
- 购物车商品表(CartItem):存储购物车中每个商品的详细信息。
- 订单表(Order):买家创建的订单信息,并通过
sellerid关联卖家。 - 订单商品表(OrderItem):存储订单中每个商品的详细信息。
USER和ORDER表、CART表有一对多关系。CATEGORY和PRODUCT表有一对多关系。ORDER和ORDERITEM表、CART和CARTITEM表都有一对多关系。USER和PRODUCT表通过userid进行一对多关系,表示卖家与其商品的关联。