宠物食谱查询工具 v1.2.0:从"能不能吃"到"该怎么喂"

举报
哦啦啦啦啦 发表于 2026/09/04 20:24:10 2026/09/04
【摘要】 宠物食谱查询工具 v1.2.0:从"能不能吃"到"该怎么喂"2026-09-04 开发日志今天给「宠物食谱查询工具」做了一次比较大的更新:食材库从 22 种扩到 66 种,新增了宠物档案和按年龄阶段的喂养指南。这篇博客记录一下这次更新的思路和实现。 起因工具的第一个版本只有 22 种狗食材。用了一段时间发现两个问题:猫呢? 家里养猫的朋友打开工具一看,全是狗的食材,完全用不了。猫是专性肉食...

宠物食谱查询工具 v1.2.0:从"能不能吃"到"该怎么喂"

2026-09-04 开发日志

今天给「宠物食谱查询工具」做了一次比较大的更新:食材库从 22 种扩到 66 种,新增了宠物档案和按年龄阶段的喂养指南。这篇博客记录一下这次更新的思路和实现。

起因

工具的第一个版本只有 22 种狗食材。用了一段时间发现两个问题:

  1. 猫呢? 家里养猫的朋友打开工具一看,全是狗的食材,完全用不了。猫是专性肉食动物(obligate carnivore),饮食需求和狗差异巨大——比如百合对猫是致命的,对狗却没什么大事。混在一起不行,必须分开。

  2. 幼犬和老年犬吃一样的? 同样是鸡胸肉,幼犬期可以频繁喂来支持生长,老年犬就要控制频率关注消化。工具只告诉你"能吃",不告诉你"现在这个阶段该怎么吃",信息只给了一半。

这两个问题决定了这次更新的两个主要方向:扩充猫食材年龄阶段喂养指南

一、食材库扩充:22 → 66

思路

每种食材的数据结构不变,还是原来的字段:

{
    "name": "鸡胸肉",
    "species": "dog",        # dog / cat
    "safety": "safe",         # safe / conditional / unsafe
    "preparation": "煮熟去骨",
    "interval_days": 2,
    "portion_advice": "每餐 10-15% 体重",
    "nutrition": "高蛋白低脂肪",
    "cautions": "避免生食,沙门氏菌风险",
    "category": "肉类"
}

关键设计:species 字段做猫狗分离。搜索时按种类过滤,猫的主人不会看到狗的食材,反之亦然。

新增内容

狗食材(22 → 42,新增 20 种):

补充了常见的蔬菜水果(西兰花、南瓜、蓝莓、苹果等)、肉类(三文鱼、牛肉、鸭肉等)、以及几个容易踩坑的——木糖醇(花生酱常见载体,对狗致命)、夏威夷果、酒精。

猫食材(0 → 24,全新):

猫的食材库从零开始建。重点标注了几个猫特有的危险项:

  • 百合:所有部位有毒,连花粉落在毛上被舔食都能致命。这个必须红色标注,不是"谨慎",是"绝对不行"。
  • 洋葱大蒜:破坏猫的红细胞,导致溶血性贫血。
  • 生鸡蛋:抗生物素蛋白影响猫的皮毛健康。
  • 巧克力:可可碱对猫的毒性比狗更强,因为猫体型更小。

安全的部分主要是煮熟的肉类(鸡胸、三文鱼、牛肉)和少量蔬菜(南瓜助消化、蒸胡萝卜)。

验证

扩完之后跑了一下去重检查,确认没有名字重复的食材。测试从 24 个更新到匹配 66 条数据的新断言,全部通过。

二、宠物档案与年龄阶段喂养

选择方案

这个功能我考虑了三种方案:

方案 做法 优点 缺点
A. 知识页 静态页面展示各阶段喂养建议 简单 和实际宠物脱节
B. 档案表 存出生日期,自动算阶段,集成到提醒 个性化 需要建表、改 UI
C. 标签化 食材按年龄阶段标安全/不安全 最精细 数据量爆炸,维护成本高

选了 方案 B。理由:A 太被动,用户不会主动去查一个知识页;C 对每种食材 × 每个阶段都要标注,66 × 6 = 396 条规则,维护不动。B 刚好——存个出生日期,自动算阶段,在提醒页展示当前阶段的建议,性价比最高。

数据库设计

新增 pets 表:

CREATE TABLE IF NOT EXISTS pets (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    species TEXT NOT NULL,      -- dog / cat
    birth_date TEXT,            -- YYYY-MM-DD
    breed TEXT,
    weight_kg REAL,
    notes TEXT
)

一个设计决策:feeding_log.pet_name 是自由文本,不是指向 pets.id 的外键。这样删除宠物档案不会丢失喂食历史——档案是"锦上添花",不是喂食记录的前提。测试 test_delete_pet_keeps_feeding_log 专门守护这个行为。

年龄阶段定义

新建 age_guidance.py,定义狗和猫各三个阶段:

狗:
  幼犬期  0-12 个月  — 少食多餐,每天 3-4 次,高蛋白高脂肪
  成犬期  1-7 岁     — 每天 1-2 次,均衡饮食
  老年期  7 岁以上    — 每天 2-3 次小份,低脂易消化,关注肾脏

猫:
  幼猫期  0-12 个月  — 频繁喂食,高蛋白高脂肪支持生长
  成猫期  1-7 岁     — 每天 2-3 次,高蛋白为主
  老年期  7 岁以上    — 每天 3-4 次小份,易消化,关注肾脏和甲状腺

三个函数:

  • get_age_stage(birth_date, species) — 返回 "junior" / "adult" / "senior"
  • get_age_text(birth_date) — 返回可读的年龄描述,如 "2 岁 3 个月"
  • get_stage_info(stage, species) — 返回该阶段的完整喂养指南 dict

集成到提醒页

提醒页的改动最大:

  1. 宠物选择:优先从档案列表选(显示名字 + 种类 + 年龄),没有档案则回退到手动输入
  2. 年龄阶段卡片:选中有档案的宠物后,顶部显示一张信息卡片——当前阶段、建议频率、营养重点、注意事项
  3. 食材过滤:按宠物种类过滤,选了猫就只看猫的食材
  4. 推荐高亮:当前阶段推荐的食材类别标 ⭐

这样用户打开提醒页,一眼就能看到:这是只 2 岁的成犬,该吃均衡饮食,鸡胸肉可以喂(⭐推荐),但牛油果就别碰了。

三、测试

从 24 个测试增加到 42 个,新增 18 个:

  • 7 个宠物档案 CRUD 测试(增删改查、删除档案保留喂食记录)
  • 11 个年龄阶段计算测试(各阶段判定、无效输入处理、格式化输出)

全绿。

四、发布

代码推送到 GitCode 后,通过华为云高校运营平台的开放 API 发布了作品:

发布流程用了一个专门的 skill,自动处理了 IAM 身份验证、STS 临时凭证生成、截图、封面合成、详情文章打包。整个过程不需要手动填表单,API 一键提交。

下一步

  • 食材库还可以继续扩,特别是猫的部分(目前 24 种,狗 42 种)
  • 年龄阶段的分界点(1 岁、7 岁)对不同品种其实应该不同——大型犬 5 岁就算老年了,但这个需要品种数据支持,暂时用通用值
  • 考虑加一个"喂食统计"页,按周/月汇总,看看是不是喂太多了
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。