Mealie!构建事无巨细的食谱管理系统
第 1 节 概述
想必各位都纠结过每天应该吃什么,使用家中现有的食材可以做出哪些之前未尝试制作过的美食。如果有一个食谱管理系统,可以在各个维度上对食谱进行检索,对检索结果提供所需的食材、制作过程等细节,那么无疑会方便许多。
Mealie 是一款非常详尽的食谱管理系统,提供了非常细致的记录和存放食谱的数据库。官网地址是这个,Github 页面的地址是这个,主要功能如下:
- 「食谱管理」:支持手动创建食谱和导入食谱,提供了食品、单位、标注、分类、标签、用具等多种相关数据的管理,方便整理大量食谱。
- 「食材与购物清单」:根据食谱自动生成食材清单,并可整合为购物清单,支持多用户协作编辑。
- 「膳食计划」:创建每日/每周的饮食计划,关联食谱并自动生成所需食材汇总。
- 「多平台访问」:适配电脑、平板或手机,随时随地查看食谱。
可以看到 Mealie 的功能是非常全面的,然而,也正是因为全面的功能,导致维护 Mealie 的数据库工作量会比较大,本文也在着力于解决这一困难。
第 2 节 安装部署
软件可以通过 Docker 进行安装部署,命令如下:
|
|
这里使用了PostgreSQL数据库,如果没有指定数据库,则会使用默认的SQLite数据库
第 3 节 枚举值维护
安装完成之后,还需要对于枚举值进行一定的维护,这样后续的使用过程中会更加得心应手。
点击左上角的「用户头像」可以进入「用户设置」页面,这里有一个非常重要的功能「数据库维护」。

进入后可以对数据库中常用的枚举值进行维护:
3.1 食材数据
标注、食品、单位是对于食材本身枚举参数的维护。
标注
标注就是单个食材的类型,比如可以设置如下:

食品
在完成上一步标注的设置之后,可以对食品进行简单的维护,因为后面可以通过 API 来维护食品,所以可以先简单构建即可:

单位
单位表示单个食材的计量单位,本身没有太多的可选项,简单维护即可:

3.2 食谱数据
食谱数据是对每个菜品的标签数据的维护。
分类
按照我的个人理解进行了简单的分类,类别可以同时选择多个:

标签
按照我的理解按照难易度和口味设置了标签:

用具
稍微设置一下,后期也可以进行添加:

第 4 节 添加食谱
设置完枚举值之后,可以开始尝试添加食谱,这里本人建议仅作为练习,尝试一下各种添加方式。对于少量的食谱,手动创建还比较方便,但如果食谱很多的情况下,就应当优先考虑使用流程化的程序进行添加。
添加食谱分为「手动创建」和「导入食谱」两种,「手动创建」可选择的字段更加多一些,「导入食谱」功能我个人使用下来感觉不是很完善,很多「手动创建」可以选择的字段,在「导入食谱」下无法使用。
4.1 手动创建
在左上角点击按钮:

给食谱添加一个不可重复的名称:

然后会进入详细设置页面,在这里可以点击「设定」,可以显示出更多的细节内容:

食材方面可以选择之前设定的枚举值进行填入,这里也可以直接创建新的枚举值并填入:

同样,分类、标签、所需用具也可以创建新的值:

做法方面也可以设置的相当的详细,如下:

营养方面可以进行的设置也很多,包括卡路里、碳水、胆固醇、脂肪、纤维、蛋白质、饱和脂肪、钠、糖、反式脂肪、不饱和脂肪:

其他的一些信息可以放到备注里面去:

4.2 导入食谱
导入食谱有一个「从 HTML 或者 JSON 导入」的方式,导入数据的模板可以前往这个网址查看:

我稍微尝试了一些写法之后发现,这样导入可以选择的字段比较有限,信息量不如手动创建多,我个人而言并不推荐使用这种方式。
4.3 使用 API 新增食谱
因为导入食谱可以选择的字段有限,手动创建食谱又比较麻烦,难以批量创建,我们可以使用官方提供的 API 模拟手动创建食谱的过程。
首先,点击左上角的「用户头像」可以进入「用户设置」页面,创建一个 「API 令牌」

我们查看一下应用提供的全部 API 接口,应用接入 Swagger,只需要在域名后面添加/docs即可以访问 API 接口了,比如:
|
|
在Recipe:CRUD列表下,我们可以看到「新增食谱」和「修改食谱」的方法:

API 令牌
使用Bearer Token将令牌输入即可:

新增食谱
查看文档,「新增食谱」可以使用 POST 请求访问接口:
|
|
只需要传入食谱的名称即可:
修改食谱
查看文档,「修改食谱」需要使用PATCH请求访问:
|
|
需要传入的参数和手动创建时相同,下面给出了一个比较详细的例子:
获取枚举值
可以看到,上一步「修改食谱」时,凡是涉及到几个枚举值的地方,都需要传入一条完整的枚举值数据,涉及到 ID 号等。
查看文档,需要使用 GET 请求「获取枚举值」的方法主要有以下这些:
|
|
新增枚举值
当我们所需的枚举值不在查询结果中时,需要使用 POST 请求「新增枚举值」,主要方法如下:
新增标注:
|
|
需要传入的参数:
新增食品:
|
|
需要传入的参数:
新增单位:
|
|
需要传入的参数:
新增分类:
|
|
需要传入的参数:
新增标签:
|
|
需要传入的参数:
新增用具:
|
|
需要传入的参数:
第 5 节 总结
根据上面列出的使用 API 新增食谱的方法,我们可以知晓,理论上,我们是可以使用一个流程化的程序来快速生成一条食谱数据的。
实际上,大部分现实中我们所见到的菜谱,并不会像 Mealie 这么详细的列举出所有可以填入的参数,很多参数是不会直接写在食谱上的,而是要根据食谱,结合常识和一定的计算才可以推断出来。
就比如,绝大部分食谱上根本不可能印有食谱的营养数据,而食物的热量、蛋白质、脂肪等参数,经过一定的推断和计算是可以算个大概的。
所以在后续,使用 AI 工具自动推算出这些数据,并且自动生成相应的数据格式并写入 Mealie 数据库才是一套更加行之有效的方式。