
1. 项目概述这套基于Python Django框架开发的宠物信息管理系统是我在去年为一个本地宠物救助站开发的实际项目。系统上线后成功帮助该机构将原本杂乱无章的纸质记录电子化管理效率提升了近70%。现在我把这个经过实战检验的系统架构和关键实现方案分享出来特别适合中小型宠物医院、宠物店或流浪动物救助组织使用。系统最核心的价值在于用最低的技术门槛实现了宠物全生命周期管理。从入院登记、健康档案、疫苗接种到领养跟踪所有环节都实现了数字化管理。我特别优化了移动端适配性工作人员用手机就能完成大部分日常操作这在实际运营中获得了极高好评。2. 系统架构设计2.1 技术选型解析选择Django作为后端框架主要基于三个考量开发效率Django自带的Admin后台和ORM能快速构建数据管理功能扩展性宠物业务逻辑会持续增加如后来新增的绝育记录模块稳定性内置的用户认证、安全防护等机制减少基础代码编写前端采用BootstrapjQuery组合而非Vue/React主要因为目标用户多为非技术人员需要更稳定的兼容性系统管理页面以表单操作为主不需要复杂前端状态管理便于后期维护救助站志愿者技术能力有限2.2 数据库设计要点核心数据表关系设计遵循宠物业务逻辑class Pet(models.Model): chip_id models.CharField(max_length50, uniqueTrue) # 芯片ID name models.CharField(max_length100) pet_type models.CharField(max_length20) # 猫/狗/其他 breed models.CharField(max_length100) # 品种 admission_date models.DateField() STATUS_CHOICES [ (in_care, 在养中), (adopted, 已领养), (deceased, 已死亡), ] status models.CharField(max_length10, choicesSTATUS_CHOICES) class MedicalRecord(models.Model): pet models.ForeignKey(Pet, on_deletemodels.CASCADE) record_date models.DateField(auto_now_addTrue) vaccine_type models.CharField(max_length100) # 疫苗类型 next_due_date models.DateField(nullTrue) # 下次接种日期 notes models.TextField(blankTrue)特别注意的字段设计为每只宠物设置唯一芯片ID实际使用中也支持手动编号医疗记录使用自动记录日期record_date避免人为误差使用choice字段规范状态值避免自由输入导致统计困难3. 核心功能实现3.1 宠物档案管理批量导入优化方案 开发了Excel模板导入功能处理了三个关键问题日期格式自动转换不同工作人员习惯不同品种名称标准化中华田园犬 vs 土狗照片压缩存储原图平均3MB→压缩后300KB实现代码片段def handle_uploaded_excel(file): df pd.read_excel(file) for index, row in df.iterrows(): try: pet Pet.objects.create( namerow[名称], pet_typestandardize_pet_type(row[类型]), # 标准化处理 admission_dateparse_date(row[入院日期]), # 日期解析 # 其他字段... ) process_pet_image(pet, row[照片URL]) # 图片处理 except Exception as e: logger.error(fRow {index} error: {str(e)})3.2 医疗记录系统疫苗提醒功能实现逻辑每次接种记录都要求填写下次接种日期每日凌晨运行定时任务检查即将到期的疫苗通过短信邮件双重提醒使用Celery异步任务关键配置示例# settings.py CELERY_BEAT_SCHEDULE { check-vaccine-due: { task: pets.tasks.check_vaccine_due, schedule: crontab(hour3, minute0), # 每天凌晨3点执行 }, } # tasks.py app.task def check_vaccine_due(): due_soon MedicalRecord.objects.filter( next_due_date__range(date.today(), date.today()timedelta(days7)) ) for record in due_soon: send_notification.delay( recipientrecord.pet.responsible_staff.email, messagef{record.pet.name}的{record.vaccine_type}疫苗将于{record.next_due_date}到期 )4. 实战经验与优化技巧4.1 性能优化方案在系统运行6个月后数据量约5000条记录我们实施了以下优化数据库索引优化为高频查询字段添加索引status, pet_type使用select_related减少查询次数# 优化前N1查询问题 pets Pet.objects.filter(statusin_care) for pet in pets: print(pet.medical_records.all()) # 优化后 pets Pet.objects.filter(statusin_care).select_related(medical_records)图片存储策略原图→阿里云OSS缩略图→本地存储使用django-storages实现混合存储4.2 移动端适配技巧针对工作人员常用手机操作的特点我们特别优化了表单字段顺序按操作流程排列先扫描芯片ID→再填写其他信息关键按钮固定底部避免长表单需要滚动到底部提交使用HTML5输入类型增强移动端体验input typedate namevaccine_date input typenumber step0.1 nameweight5. 常见问题解决方案5.1 数据备份策略采用3-2-1备份原则3份备份数据库每日dump 代码仓库 本地压缩包2种介质云存储物理硬盘1份离线备份每周同步到移动硬盘备份脚本示例#!/bin/bash # 每日数据库备份 DATE$(date %Y%m%d) pg_dump -U postgres petdb /backups/db/petdb_$DATE.sql # 保留最近30天备份 find /backups/db/ -type f -mtime 30 -delete5.2 用户权限控制根据实际需求设计了三级权限志愿者仅查看添加基础信息医护人员可操作医疗记录管理员完整权限系统设置实现方式permission_required(pets.change_medicalrecord) def vaccine_edit(request, pet_id): # 疫苗编辑视图 pass6. 系统扩展方向实际运营中我们陆续增加了这些实用功能领养人黑名单记录不良领养人信息使用Django的contenttypes框架实现通用关系物资管理系统跟踪宠物食品、药品库存微信小程序端使用Django REST Framework提供API一个特别实用的扩展是绝育手术跟踪模块class Sterilization(models.Model): pet models.ForeignKey(Pet, on_deletemodels.CASCADE) surgery_date models.DateField() vet_name models.CharField(max_length100) cost models.DecimalField(max_digits8, decimal_places2) follow_up_date models.DateField(nullTrue) def save(self, *args, **kwargs): # 自动设置6个月后的随访日期 if not self.follow_up_date and self.surgery_date: self.follow_up_date self.surgery_date timedelta(days180) super().save(*args, **kwargs)这套系统经过一年多的实际运行最让我自豪的是它的稳定性——从未发生过数据丢失或服务中断。关键经验是在初期就要设计好数据备份方案和日志系统这比后期补救要高效得多。现在开源版本已经移除了客户敏感信息包含完整部署文档任何熟悉Django的开发者都能在半小时内完成本地部署。