基于 FastAPI + Vue 的宠物领养管理系统

项目简介

本系统是一套完整的宠物领养管理平台,分为用户端管理员端双端,覆盖宠物领养、流浪动物救助、寻宠启示、互动论坛、公益捐赠、活动报名等核心业务场景。系统采用前后端分离架构,后端提供 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.imagesstray_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年
项目用途 计算机专业毕业设计
系统名称 爱心宠物领养管理系统

相关推荐
一杯奶茶¥1 小时前
水果销售网站 CRM客户信息管理系统 超市管理系 酒店管理系统 健身房管理系统 在线音乐网站 校园招聘系统
java·vue.js·spring boot·mysql·spring·java项目
lichenyang4531 小时前
鸿蒙 Web 容器(五·完结):闭环回传、容器治理,兼谈 AtomicServiceEnhancedWeb
前端
lichenyang4531 小时前
鸿蒙 Web 容器(四):ArkTS 拿到请求后,怎么「按 action 找能力」?
前端
lichenyang4531 小时前
鸿蒙 Web 容器(三):H5 怎么「调」到 ArkTS?
前端
代码不加糖1 小时前
Proxy能够监听到对象中的对象的引用吗?
开发语言·前端·javascript
英勇无比的消炎药2 小时前
一站式搞定品牌风格:TinyRobot 主题定制从入门到精通
vue.js
光影少年2 小时前
react 原理与进阶
前端·react.js·掘金·金石计划
kyrie282 小时前
Vue 全套性能优化方案
前端
Sour2 小时前
PDF翻译卡住不动怎么办?扫描件、OCR 和大文件排查清单
前端·pdf·ocr