1. 项目概述
作为一名有多年Django开发经验的程序员,今天我想分享一个基于Django的宠物服务管理系统的完整实现方案。这个项目是我指导过的一个优秀毕业设计案例,采用了Python+Django+MySQL的技术栈,实现了宠物店日常运营所需的各项功能。
宠物服务行业近年来发展迅速,但很多中小型宠物店仍然采用手工记录的方式管理客户和宠物信息,效率低下且容易出错。这个系统就是为了解决这些问题而设计的,它包含了会员管理、宠物档案、服务预约、商品销售等核心模块,能够有效提升宠物店的管理效率和服务质量。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术选型分析
在技术选型上,我们经过多方比较最终确定了以下技术栈:
后端框架:Django
- 选择理由:Django是Python最成熟的Web框架之一,自带ORM、Admin后台、用户认证等常用功能,开发效率高
- 版本:Django 3.2 LTS(长期支持版)
- 关键特性:MTV模式、自带Admin、完善的文档
数据库:MySQL
- 选择理由:关系型数据库,性能稳定,社区支持好
- 版本:MySQL 8.0
- 优化措施:建立了适当的索引,使用了连接池
前端技术:
- HTML5 + CSS3 + JavaScript基础架构
- Bootstrap 5响应式框架
- jQuery简化DOM操作
- Ajax实现异步交互
2.2 系统架构图
整个系统采用经典的MVC(在Django中称为MTV)架构:
code复制[客户端浏览器]
↓
[Django视图层] (处理HTTP请求/响应)
↓
[Django模板层] (前端展示)
↑
[Django模型层] (数据持久化)
↓
[MySQL数据库]
2.3 目录结构设计
标准的Django项目结构经过适当调整,增加了业务模块:
code复制pet_management/
├── apps/ # 业务应用
│ ├── accounts/ # 用户账户管理
│ ├── pets/ # 宠物档案管理
│ ├── services/ # 服务预约管理
│ └── products/ # 商品管理
├── config/ # 项目配置
│ ├── settings/ # 多环境配置
│ └── urls.py # 主路由
├── static/ # 静态资源
├── templates/ # 全局模板
└── manage.py # 管理脚本
3. 核心功能模块实现
3.1 用户认证系统
3.1.1 用户模型扩展
Django自带的User模型字段有限,我们通过继承AbstractUser进行了扩展:
python复制from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
GENDER_CHOICES = (
('M', '男'),
('F', '女'),
('O', '其他')
)
mobile = models.CharField('手机号', max_length=11, unique=True)
gender = models.CharField('性别', max_length=1, choices=GENDER_CHOICES)
birthday = models.DateField('生日', null=True, blank=True)
avatar = models.ImageField('头像', upload_to='avatars/', null=True, blank=True)
class Meta:
db_table = 'auth_user'
关键点:
- 使用AbstractUser而不是AbstractBaseUser,保留原有功能
- 添加了宠物店业务需要的额外字段
- 设置了手机号为唯一标识
3.1.2 登录注册实现
注册流程采用了手机号+验证码的方式:
python复制# views.py
from django.contrib.auth import login
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def register(request):
if request.method == 'POST':
mobile = request.POST.get('mobile')
code = request.POST.get('code')
password = request.POST.get('password')
# 验证短信验证码
if not verify_sms_code(mobile, code):
return JsonResponse({'code': 400, 'msg': '验证码错误'})
# 创建用户
user = User.objects.create_user(
username=mobile,
mobile=mobile,
password=password
)
# 自动登录
login(request, user)
return JsonResponse({'c
