
1. 项目背景与核心价值养宠人群的快速增长催生了宠物管理数字化需求。根据2023年宠物行业白皮书显示中国城镇宠物主已突破1.2亿其中68%的饲主会定期记录宠物健康数据。传统纸质记录方式存在易丢失、难追溯、无法多端同步等痛点这正是我们开发数字化养宠记录系统的核心驱动力。这个采用DjangoVue技术栈的宠物行为记录平台本质上解决的是宠物生命周期数据管理的三个关键问题行为数据结构化将零散的喂养记录、医疗信息转化为可分析的标准化数据多终端协同通过前后端分离架构实现手机/电脑/平板的跨设备同步健康预警基于历史数据建立宠物行为基线模型异常波动自动提醒技术选型上Django作为全 batteries included的Python框架其自带的Admin后台和ORM系统能快速搭建数据管理模块而Vue.js的响应式特性则完美适配需要实时更新的行为记录场景。PyCharm作为开发环境其Django模板支持和Vue插件大幅提升了全栈开发效率。2. 系统架构设计2.1 技术栈选型对比技术选项适用场景本项目选择理由Django需要快速开发的管理系统自带用户认证、Admin后台减少基础代码量Flask轻量级API服务本项目需要完整后台管理功能Vue.js高交互前端应用双向数据绑定适合实时记录场景MySQL关系型数据存储Django原生支持事务保障数据一致性PyCharmPython全栈开发集成Django调试和Vue语法支持2.2 前后端分离架构采用典型的B/S架构[Vue前端] ←HTTP→ [Django REST API] ←ORM→ [MySQL] ↑ ↑ Axios Django REST Framework前端工程通过vue-cli搭建采用以下核心配置// vue.config.js module.exports { devServer: { proxy: { /api: { target: http://localhost:8000, ws: true, changeOrigin: true } } } }后端Django项目结构petcare/ ├── apps/ │ ├── account/ # 用户认证 │ ├── pet/ # 宠物档案 │ └── record/ # 行为记录 ├── config/ # 项目配置 └── manage.py3. 核心功能实现3.1 宠物档案建模Django模型设计考虑宠物多维度属性# pet/models.py class Pet(models.Model): PET_TYPE_CHOICES [ (DOG, 犬科), (CAT, 猫科), (OTHER, 其他) ] owner models.ForeignKey(User, on_deletemodels.CASCADE) name models.CharField(max_length50) pet_type models.CharField(max_length10, choicesPET_TYPE_CHOICES) birthday models.DateField(nullTrue) weight_history JSONField(defaultlist) # 使用PostgreSQL特有字段 def get_age(self): return (date.today() - self.birthday).days // 365 if self.birthday else 0注意JSONField需要Django 3.1版本或django-jsonfield-backport包适合存储动态结构化的体重变化数据3.2 行为记录功能前端采用Day.js处理时间选择实现记录表单template div classrecord-form select v-modelrecordType option valueFEEDING喂食/option option valueWALKING遛狗/option option valueMEDICAL医疗/option /select datetime-picker v-modelrecordTime typedatetime/ button clicksubmitRecord保存记录/button /div /template script import { postRecord } from /api/record export default { data() { return { recordType: FEEDING, recordTime: new Date() } }, methods: { async submitRecord() { await postRecord({ pet_id: this.$route.params.id, record_type: this.recordType, timestamp: this.recordTime.toISOString() }) this.$toast.success(记录已保存) } } } /script3.3 数据可视化看板利用ECharts实现宠物健康趋势图关键配置// 在vue组件中 async fetchWeightData() { const res await getPetWeightHistory(this.petId) this.chart.setOption({ xAxis: { type: category, data: res.data.map(item item.date) }, yAxis: { type: value }, series: [{ data: res.data.map(item item.weight), type: line, smooth: true }] }) }4. 开发环境配置4.1 PyCharm专业版关键配置启用Django支持File → Settings → Languages Frameworks → Django勾选Enable Django Support设置Manage.py路径和Settings模块Vue.js插件配置安装Vue.js插件内置在PyCharm专业版设置File Watchers自动编译.vue文件数据库工具连接右侧Database面板 → → Data Source → MySQL配置主机、端口、认证信息测试连接后应用4.2 项目依赖管理推荐使用Poetry管理Python依赖# 初始化环境 poetry init poetry add django django-rest-framework django-cors-headers # 前端依赖 cd frontend npm install axios dayjs echarts vue-router5. 部署实践5.1 生产环境部署方案采用Docker Compose编排服务version: 3 services: db: image: postgres:13 environment: POSTGRES_PASSWORD: petcare123 volumes: - pg_data:/var/lib/postgresql/data backend: build: . command: gunicorn config.wsgi:application --bind 0.0.0.0:8000 volumes: - .:/code depends_on: - db frontend: image: nginx:alpine ports: - 80:80 volumes: - ./frontend/dist:/usr/share/nginx/html关键提示生产环境务必配置ALLOWED_HOSTS和CORS_ORIGIN_WHITELIST避免安全风险6. 典型问题排查6.1 跨域问题解决方案Django端配置示例# settings.py INSTALLED_APPS [corsheaders] MIDDLEWARE.insert(2, corsheaders.middleware.CorsMiddleware) CORS_ALLOWED_ORIGINS [ http://localhost:8080, https://yourdomain.com ]6.2 静态文件404问题Nginx配置关键点location /static/ { alias /path/to/your/staticfiles/; expires 30d; } location /media/ { alias /path/to/your/media/; expires 30d; }7. 扩展功能建议智能提醒引擎# 使用Celery实现定时任务 app.task def check_vaccination_due(): pets Pet.objects.filter( next_vaccination__ltetimezone.now() timedelta(days7) ) for pet in pets: send_notification.delay( user_idpet.owner.id, messagef{pet.name}的疫苗即将到期 )行为分析API# 使用Pandas分析行为模式 def analyze_behavior_pattern(pet_id): records BehaviorRecord.objects.filter(pet_idpet_id) df pd.DataFrame.from_records(records.values()) return { feeding_interval: df[df.typeFEEDING][time].diff().mean(), active_hours: df[df.typeWALKING].groupby(df[time].dt.hour).size() }多宠物家庭支持template div classpet-switcher select v-modelcurrentPetId option v-forpet in pets :valuepet.id {{ pet.name }} /option /select /div /template script export default { computed: { currentPetId: { get() { return this.$store.state.currentPetId }, set(id) { this.$store.commit(SET_CURRENT_PET, id) } } } } /script这个项目我在实际开发中发现Django的ModelAdmin自定义是个宝藏功能通过重写list_display和list_filter可以快速构建强大的数据管理后台。比如给宠物记录添加自定义筛选器admin.register(BehaviorRecord) class RecordAdmin(admin.ModelAdmin): list_display (pet, type, timestamp) list_filter (type, (pet, admin.RelatedOnlyFieldListFilter)) def get_queryset(self, request): qs super().get_queryset(request) if not request.user.is_superuser: return qs.filter(pet__ownerrequest.user) return qs