项目简介
本系统是一套完整的宠物领养管理平台,分为用户端 与管理员端双端,覆盖宠物领养、流浪动物救助、寻宠启示、互动论坛、公益捐赠、活动报名等核心业务场景。系统采用前后端分离架构,后端提供 RESTful API,前端基于 Vue 3 构建响应式界面,支持图片上传、数据可视化、Excel 导出等功能,适合作为毕业设计或实际项目参考。
核心功能
用户端
账号与个人中心
注册时可选择普通用户或爱心志愿者身份,登录后可管理个人信息、修改密码、查看所有操作记录(领养、报告、捐赠、帖子)及消息通知。
宠物领养
支持按物种、品种、状态等条件浏览和搜索待领养宠物,点击宠物详情后可在线提交领养申请(支持上传证明材料),并实时查看审核进度;领养完成后可对本次体验进行星级评价。
流浪宠物救助
任何用户均可发布流浪宠物救助报告,经管理员审核通过后向全平台展示;志愿者可认领救助任务并跟进更新进度,直至标记解决。
丢失宠物管理
支持发布寻宠启示(含悬赏金额),其他用户可查看信息并提供线索;宠物找回后可由发布者标记状态为已解决。
互动论坛
用户可发帖、评论、点赞、举报不良内容;管理员可在后台对被举报帖子进行隐藏或删除处理。
公益功能
支持资金捐赠与物资捐赠,捐赠记录可追溯;提供公益活动列表与在线报名;救助站和喂养点以列表形式展示,支持查看经纬度坐标并一键跳转地图导航;科普文章与平台公告统一在内容中心管理。
管理员端
用户管理:查询、锁定/解锁、角色调整(普通用户/志愿者/管理员)、删除用户,支持导出 Excel。
宠物管理:新增、编辑、删除宠物信息,管理绝育与疫苗状态。
领养审核:逐条审核领养申请,一键通过或驳回并填写审核意见,审核结果自动通知申请人,支持导出申请记录。
信息审核:统一审核流浪宠物报告与寻宠启示,通过后在用户端展示。
论坛审核:查看全部帖子及被举报内容,可执行恢复、隐藏、删除操作。
捐赠管理:管理资金与物资捐赠状态(待确认→已确认→已完成),实时统计累计捐款总额。
活动管理:发布、编辑、删除公益活动,管理报名状态与人数上限。
救助站管理:维护救助站与喂养点信息,包含经纬度坐标以供地图定位。
内容管理:发布和管理科普文章与平台公告,支持草稿、发布、隐藏三种状态。
数据看板:可视化展示注册用户数、待领养宠物数、待审核申请数、累计捐款总额等核心指标;包含近7日领养趋势折线图与宠物物种分布饼图。
技术栈
| 层次 | 技术 | 说明 |
|---|---|---|
| 后端框架 | FastAPI 0.104 | 高性能异步 Python Web 框架 |
| 数据库 | MySQL 8.0 | 关系型数据库,utf8mb4 字符集 |
| ORM | SQLAlchemy 2.0 | Python 数据库对象关系映射 |
| 数据验证 | Pydantic v2 | 请求/响应数据校验 |
| 身份认证 | JWT(python-jose) | Token 令牌认证,有效期8小时 |
| 密码加密 | passlib + bcrypt | 不可逆哈希加密 |
| 文件上传 | python-multipart | 支持图片与资料文件上传 |
| 数据导出 | openpyxl | 生成 Excel 文件 |
| 前端框架 | Vue 3 + Vite 4 | Composition API,Node 16 |
| UI 组件库 | Element Plus 2.4 | 基于 Vue 3 的桌面端组件库 |
| 状态管理 | Pinia 2 | Vue 3 官方推荐状态管理方案 |
| HTTP 请求 | Axios 1.5 | 封装请求拦截器与响应拦截器 |
| 数据可视化 | ECharts 5 + vue-echarts | 后台数据看板图表 |
| 路由 | Vue Router 4 | 前端路由,含权限守卫 |
项目结构
c171/
├── sql/
│ └── init.sql # 数据库建表脚本及初始化数据
│
├── backend/ # FastAPI 后端
│ ├── main.py # 应用入口,路由注册,启动事件
│ ├── requirements.txt # Python 依赖清单
│ ├── .env.example # 环境变量模板
│ ├── uploads/ # 上传文件存放目录(自动创建)
│ ├── core/
│ │ ├── config.py # 全局配置(读取 .env)
│ │ ├── database.py # 数据库连接与会话管理
│ │ ├── security.py # JWT 生成/解析,密码哈希
│ │ └── dependencies.py # 公共依赖注入(鉴权)
│ ├── models/ # SQLAlchemy 数据模型
│ │ ├── user.py
│ │ ├── pet.py
│ │ ├── adoption.py
│ │ ├── stray_report.py
│ │ ├── forum.py
│ │ ├── donation.py
│ │ ├── activity.py
│ │ ├── rescue_station.py
│ │ ├── article.py
│ │ └── notification.py
│ ├── schemas/ # Pydantic 请求/响应模型
│ │ ├── common.py
│ │ ├── user.py
│ │ ├── pet.py
│ │ ├── adoption.py
│ │ ├── stray_report.py
│ │ ├── forum.py
│ │ ├── donation.py
│ │ ├── activity.py
│ │ ├── rescue_station.py
│ │ ├── article.py
│ │ └── notification.py
│ └── api/ # 路由处理层
│ ├── auth.py # 注册、登录、修改密码
│ ├── users.py # 个人信息管理
│ ├── pets.py # 宠物增删改查
│ ├── adoptions.py # 领养申请与审核
│ ├── stray_reports.py # 流浪/寻宠报告
│ ├── forum.py # 论坛帖子与评论
│ ├── donations.py # 捐赠记录管理
│ ├── activities.py # 公益活动与报名
│ ├── rescue_stations.py # 救助站/喂养点
│ ├── articles.py # 文章/公告
│ ├── notifications.py # 消息通知
│ ├── admin.py # 管理员专属(用户管理/数据统计/导出)
│ └── upload.py # 文件上传
│
└── frontend/ # Vue 3 前端
├── package.json
├── vite.config.js # Vite 配置(含代理)
├── index.html
└── src/
├── main.js # 应用入口
├── App.vue
├── styles/
│ ├── variables.css # CSS 全局变量(主题色)
│ └── global.css # 全局样式重置与工具类
├── router/
│ └── index.js # 路由配置与权限守卫
├── store/
│ └── user.js # 用户状态(Pinia)
├── api/ # 各模块接口封装
│ ├── index.js # Axios 实例与拦截器
│ ├── auth.js
│ ├── pets.js
│ ├── adoptions.js
│ ├── stray.js
│ ├── forum.js
│ ├── donations.js
│ ├── activities.js
│ ├── stations.js
│ ├── articles.js
│ ├── notifications.js
│ └── admin.js
├── components/
│ ├── layout/
│ │ ├── UserLayout.vue # 用户端顶部导航布局
│ │ └── AdminLayout.vue # 管理员端侧边栏布局
│ └── common/
│ ├── PetCard.vue # 宠物卡片组件
│ └── ImageUpload.vue # 图片上传组件
└── views/
├── auth/
│ ├── Login.vue # 登录页(左右对称布局)
│ └── Register.vue # 注册页
├── user/ # 用户端页面
│ ├── Home.vue # 首页(Banner + 快捷入口 + 推荐内容)
│ ├── PetList.vue # 宠物列表(搜索筛选)
│ ├── PetDetail.vue # 宠物详情(领养申请)
│ ├── MyApplications.vue # 我的领养申请
│ ├── StrayReports.vue # 流浪宠物救助
│ ├── LostPets.vue # 寻宠启示
│ ├── Forum.vue # 论坛列表
│ ├── ForumPost.vue # 帖子详情+评论
│ ├── Donations.vue # 公益捐赠
│ ├── Activities.vue # 公益活动
│ ├── RescueMap.vue # 救助地图
│ ├── Articles.vue # 科普文章列表
│ ├── ArticleDetail.vue # 文章详情
│ ├── Notifications.vue # 消息通知
│ └── Profile.vue # 个人中心
└── admin/ # 管理员端页面
├── Dashboard.vue # 数据看板
├── Users.vue # 用户管理
├── Pets.vue # 宠物管理
├── Adoptions.vue # 领养审核
├── StrayReview.vue # 流浪/寻宠审核
├── ForumReview.vue # 论坛审核
├── Donations.vue # 捐赠管理
├── Activities.vue # 活动管理
├── Stations.vue # 救助站管理
└── Articles.vue # 内容管理
数据库设计
系统共设计 11 张数据表,均使用 utf8mb4 字符集,完整支持中文及 Emoji 存储。
| 表名 | 说明 | 核心字段 |
|---|---|---|
users |
用户表 | id、username、email、password_hash、role(user/volunteer/admin)、status |
pets |
宠物信息表 | id、name、species、breed、age、gender、status(available/adopted/stray)、is_neutered、is_vaccinated、images(JSON) |
adoption_applications |
领养申请表 | id、user_id、pet_id、reason、material_url、status(pending/approved/rejected)、review_note、rating |
stray_reports |
流浪/寻宠报告表 | id、user_id、type(stray/lost)、species、location、images、status、volunteer_id、reward |
forum_posts |
论坛帖子/评论表 | id、user_id、parent_id(NULL为主帖)、title、content、likes、is_reported |
donations |
捐赠记录表 | id、user_id、type(money/supplies)、amount、item_name、item_quantity、status |
activities |
公益活动表 | id、title、location、start_time、end_time、max_participants、current_participants、status |
activity_registrations |
活动报名表 | id、activity_id、user_id、status(registered/cancelled) |
rescue_stations |
救助站/喂养点表 | id、name、type(station/feeding_point)、address、longitude、latitude |
articles |
内容表 | id、type(article/announcement)、title、content、author_id、status、views |
notifications |
消息通知表 | id、user_id、type、title、content、is_read、related_id |
关键设计说明:
forum_posts通过parent_id自关联实现帖子与评论的层级结构,NULL代表主帖,非NULL代表评论;pets.images、stray_reports.images等字段使用 MySQL JSON 类型存储图片路径数组;stray_reports.type通过枚举值区分流浪宠物报告(stray)和寻宠启示(lost),合并为同一张表;articles.type同理区分科普文章(article)与平台公告(announcement);- 所有时间字段均使用
CURRENT_TIMESTAMP自动填充,updated_at在记录更新时自动刷新。
启动教程
环境要求
| 软件 | 版本要求 |
|---|---|
| Python | 3.9 及以上 |
| MySQL | 8.0 及以上 |
| Node.js | 16.x |
| npm | 8.x 及以上 |
数据库初始化
登录 MySQL 后执行初始化脚本:
source /path/to/c171/sql/init.sql
或使用 Navicat 等工具直接运行 sql/init.sql 文件,脚本会自动创建数据库 pet_adoption 及所有数据表,并插入示例宠物、救助站、文章数据。
后端启动
进入 backend/ 目录,依次执行以下操作:
第一步,复制环境变量模板并填写配置:
复制 .env.example 为 .env,修改以下字段:
DB_PASSWORD=你的MySQL密码
SECRET_KEY=自定义一个随机字符串
第二步,安装 Python 依赖:
pip install -r requirements.txt
第三步,启动服务:
uvicorn main:app --reload --port 8000
启动成功后,接口文档访问地址为 http://localhost:8000/api/docs。
系统首次启动会自动创建默认管理员账号:
- 账号:
admin - 密码:
admin123456
前端启动
进入 frontend/ 目录,依次执行:
npm install
npm run dev
启动成功后访问 http://localhost:5173 即可进入系统。
前端通过 Vite 代理将 /api 和 /uploads 请求转发至后端 http://localhost:8000,无需额外配置跨域。
接口说明
后端基于 FastAPI 自动生成交互式接口文档,支持在线调试:
- Swagger UI:
http://localhost:8000/api/docs
主要接口前缀:
| 前缀 | 说明 |
|---|---|
/api/auth |
注册、登录、修改密码 |
/api/pets |
宠物信息(公开读取,管理员写入) |
/api/adoptions |
领养申请(用户提交,管理员审核) |
/api/stray |
流浪/寻宠报告 |
/api/forum |
论坛帖子与评论 |
/api/donations |
捐赠记录 |
/api/activities |
公益活动与报名 |
/api/stations |
救助站/喂养点 |
/api/articles |
科普文章与公告 |
/api/notifications |
消息通知 |
/api/admin |
管理员专属(用户管理、数据统计、Excel导出) |
/api/upload |
文件上传(图片/资料) |
所有需要登录的接口均通过 Authorization: Bearer <token> 请求头传递 JWT 令牌,Token 有效期为 8 小时。
开发作者
| 项目 | 信息 |
|---|---|
| 开发者 | Jay |
| 定制联系 | vx:Jay8059 |
| 开发年份 | 2026年 |
| 项目用途 | 计算机专业毕业设计 |
| 系统名称 | 爱心宠物领养管理系统 |
















