这是一个基于 Vue.js 前端和 Python Flask 后端的汽车租赁平台项目。
- 用户注册和登录(基于 JWT 进行安全认证)
- 用户密码哈希加密存储。
- 浏览和筛选车辆
- 车辆预订
- 集成 Elasticsearch 实现车辆搜索
git clone <repository-url> # 请将 <repository-url> 替换为实际的仓库地址
cd car-rental-full
-
确保已安装并运行Node.js (推荐 v14.x 或更高版本), Python, MySQL, 和 Elasticsearch。
-
数据库配置:
- 创建一个名为
car_rental
的 MySQL 数据库。 - 导入项目根目录下的
car_rent.sql
文件到car_rental
数据库中。这将创建必要的表结构。 - 根据您的 MySQL 配置,修改后端 文件中的数据库连接字符串:
将
# app.py app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://your_mysql_user:your_mysql_password@your_mysql_host/car_rental'
your_mysql_user
,your_mysql_password
, 和your_mysql_host
替换为您的实际 MySQL 用户名、密码和主机地址(如果不是默认的root:root@localhost
)。
- 创建一个名为
-
安装 Python 依赖: 进入项目根目录
car-rental-full
,建议创建并激活 Python 虚拟环境:python -m venv venv # Windows 系统激活: .\venv\Scripts\activate # macOS/Linux 系统激活: # source venv/bin/activate pip install -r requirements.txt
-
Elasticsearch 配置:
-
应用程序默认连接到
http://localhost:9200
的 Elasticsearch 服务。您可以在 文件中修改此配置。 -
修改 Elasticsearch 默认密码: 如果您刚安装 Elasticsearch,默认的
elastic
用户可能有一个生成的密码或者初始没有设置密码。要设置或更改elastic
用户的密码:- 导航到您的 Elasticsearch 安装目录。
- 运行密码重置工具。例如,在 Linux/macOS 上:
在 Windows 上:
./bin/elasticsearch-reset-password -u elastic
.\bin\elasticsearch-reset-password.bat -u elastic
- 此命令将生成一个新密码,请记下它。
- 如果您启用了认证,请更新 中的
http_auth
:es = Elasticsearch( ['http://localhost:9200'], http_auth=('elastic', '您的新ELASTIC_PASSWORD') )
-
数据初始化: 首次运行 Flask 后端时,系统会尝试:
- 创建必要的数据库表(如果它们不存在)。
- 通过车辆管理页面或直接向数据库添加车辆数据来填充
car_info
表。 - 创建一个名为
cars
的 Elasticsearch 索引(如果它不存在)。 - 将示例车辆数据索引到 Elasticsearch。
这是一次性设置。如果
car_info
表中已有数据,则将跳过此初始同步。
-
-
启动 Flask 开发服务器:
python app.py
后端服务将在
http://localhost:5000
上可用。 -
启动后端服务 (node-api):
在确保所有后端依赖都已安装,且数据库和日志目录配置正确后,进入 node-api 目录并运行以下命令:
```bash
cd node-api
node app.js
```
后端服务将在 `http://localhost:5000` 上可用。
- 导航到前端目录:
cd car-rental
- 安装 Node.js 依赖:
npm install
- 启动 Vue 开发服务器:
前端应用将在
npm run dev
http://localhost:5173
(或其他可用端口) 上可用,并可能在浏览器中自动打开。
- 打开浏览器并访问
http://localhost:5173
。 - 注册新用户或使用已有账户登录。
- 浏览可用车辆。在车辆展示页面使用搜索框通过 Elasticsearch 查找车辆。
├── .gitignore
├── README.md
├── app.py
├── car-rental\
│ ├── .gitignore
│ ├── .vscode\
│ │ └── extensions.json
│ ├── index.html
│ ├── package-lock.json
│ ├── package.json
│ ├── public\
│ │ └── vite.svg
│ ├── server.js
│ ├── src\
│ │ ├── App.vue
│ │ ├── assets\
│ │ ├── axios.js
│ │ ├── components\
│ │ ├── main.js
│ │ ├── router\
│ │ └── services\
│ └── vite.config.js
├── car_rent.sql
├── elasticsearch_utils.py
├── minio_service\
│ ├── MINIO_SETUP.md
│ ├── __init__.py
│ ├── minio_config.py
│ └── minio_utils.py
├── node-api\
│ ├── app.js
│ ├── config\
│ │ ├── db.js
│ │ └── logger.js
│ ├── controllers\
│ │ └── authController.js
│ ├── middleware\
│ │ └── authMiddleware.js
│ ├── package-lock.json
│ ├── package.json
│ ├── routes\
│ │ └── auth.js
│ └── utils\
│ └── jwt.js
├── requirements.txt
├── utils\
│ └── update_bucket_policy.py
- 前端: Vue 3, Vite, Vue Router, Naive UI (或其他UI库), Axios (用于API请求)
- 后端:
- Python 后端: Flask, Flask-SQLAlchemy (ORM), Flask-CORS, PyMySQL, bcrypt (密码哈希), Elasticsearch (搜索)
- Node.js 后端 (本次新增): Node.js, Express.js, JWT (JSON Web Tokens), Winston (日志), Bcrypt.js (密码哈希)
- 数据库: MySQL
- 后端
app.py
中的app.config['SECRET_KEY'] = 'your_secret_key'
应该替换为一个更安全的密钥。 - 确保后端 CORS 配置
CORS(app, origins="http://localhost:5173", supports_credentials=True)
中的origins
与你前端运行的地址和端口一致。 - 启动 Node.js 后端服务前的必要步骤。
- 确保您的 MySQL 数据库已启动并可访问。
- 修改 .env 文件: 在 node-api 项目的根目录下修 .env 文件(如果它不存在),并添加您的数据库连接密码
/src/components/ChatInterface.vue /src/components/Loginform.vue /src/components/MessageItem.vue /src/services/ChatService.js 在整个car-rental的文件夹当中:server.js src/main.js和src/App.vue改过的我打好注释了
npm install element-plus vue ws
npm install express ws memcached
memcached -d
node server.js
npm run serve
上面两个启动一个之后访问就行,app.vue还没改,我怕给整个玩坏了
本项目集成了 MinIO 对象存储服务用于管理车辆图片。以下是安装和配置步骤:
# 使用 PowerShell 下载 MinIO
Invoke-WebRequest -Uri "https://dl.min.io/server/minio/release/windows-amd64/minio.exe" -OutFile "minio.exe"
# 创建数据目录
mkdir C:\minio-data
# 启动 MinIO 服务器
.\minio.exe server D:\minio-data --console-address ":9001"
启动 MinIO 后,您可以通过以下方式访问:
- API 地址: http://localhost:9000
- 控制台地址: http://localhost:9001
- 默认用户名: minioadmin
- 默认密码: minioadmin
- 访问 MinIO 控制台:http://localhost:9001
- 使用默认凭据登录(minioadmin/minioadmin)
- 创建名为
car-images
的存储桶
项目启动时会自动将现有的车辆图片迁移到 MinIO:
# 启动 Flask 后端(会自动触发图片迁移)
python app.py
项目的 MinIO 配置位于 minio_config.py
文件中,您可以根据需要修改:
- 服务器地址和端口
- 访问密钥和秘密密钥
- 存储桶名称
- 文件上传限制
更多详细信息请参考项目根目录下的 MINIO_SETUP.md
文档。
- 【新增项目】 独立的 node-api 后端服务项目:提供用户注册、登录、个人信息获取等基于 JWT 的认证 API。
- 【新增集成】 集成 Winston 日志库,实现控制台和文件日志(logs/combined.log, logs/error.log)记录。
- 【主要改动文件】
- node-api/app.js 或 server.js:后端入口文件,可能包含数据库连接和中间件配置。
- node-api/config/logger.js:【新增文件】 或 【主要修改文件】,Winston 日志配置。
- node-api/routes/auth.js:【新增文件】 或 【主要修改文件】,处理用户认证相关的 API 路由。
- node-api/routes/user.js:【新增文件】 或 【主要修改文件】,处理用户个人资料相关的 API 路由(如 /api/auth/me)。
- node-api/models/user.js:【新增文件】 或 【主要修改文件】,用户数据模型定义。
- node-api/utils/ 目录下新增了 JWT 或其他辅助工具文件。
- 【新增功能】 完整的用户登录、注册、个人信息展示页面。
- 【新增功能】 通过 Vue Router 导航守卫 实现路由鉴权,保护 /profile 等页面。
- 【主要改动文件】
- car-rental/src/components/Login.vue:【主要修改文件】,处理用户登录逻辑。
- car-rental/src/components/Register.vue:【主要修改文件】,处理用户注册逻辑。
- car-rental/src/components/Profile.vue:【新增文件】,用于展示用户个人信息。
- car-rental/src/router/index.js:【主要修改文件】,新增路由和导航守卫配置。
- car-rental/src/axios.js:【主要修改文件】,配置 Axios 实例,用于与后端 API 通信。