知行何家 - 物品管理
type: channel
link: https://www.hehome.xyz/tag/%E7%89%A9%E5%93%81%E7%AE%A1%E7%90%86/
items: 智慧家庭之物品管理

智慧家庭之物品管理
type: item
date: 2020-03-09T23:56:00+08:00
description: 最近，因为新型冠状病毒的影响，我没法回到学校，这段时间一直是呆在家里。看着家里乱糟糟的，终于也下定决心趁着这段时间好好地整理一下。以前我们也曾多次整理过家里的物品，不过都没能坚持太长时间。想着是不是因为没有给东西做记录的原因，这次便准备边整理边记录一下。说到记录我第一反应便是用 Excel，想着一张表上登记上每件物品的名字和存放的位置，然后一张表上登记每个位置之间的关系。我自己填写了一下之后，发现登记很烦，而且手机上用这些软件也不方便。正好，我前不久我看了看 Django 的教程，就想着这两张表，不就是一个关系模型么。不如写一个网站出来，把数据存放到专门的数据库里。然后针对手机优化一下，这样登记物品不就方便多了。心动不如行动，我又去重新看了一遍教程。首先，去建立了一个叫 智慧家庭 的仓库来存放代码。之所以叫这个名字，也是因为之前我已经写过一个 IOT 网站，用来遥控家里的单片机控制电磁阀开关。前不久去看 Django 也是想着把 IOT 网站重写一下。这次正好就可以趁这个机会把这两个网站合并起来，家里的很多东西都信息化，智能化了，不就是个智慧家庭么🤣。以前玩 Flask 的时候接触过模板系统，这次用 Django 也不算陌生，很容易就上手了。通过努力，我实现了位置和物品的添加，修改，删除功能。网站主要分为两种类型的页面，一是位置的详情界面，展示当前位置下的子位置和物品，并且可以很方便的直接向当前位置添加物品或者位置。二是物品的详情界面，展示了这个物品的各种属性，如名称，数量，备注，存放位置，更新时间和录入者。在使用网站来登记物品的过程中，我发现还需要一个新的属性，有效期。家里很多东西都是有保质期的，既然已经写了这样一个网站，那么给网站加上提醒最近过期物品的功能岂不更妙。既然要添加日期，就需要 Datetime Picker。当前我网站的页面使用的 Bootstrap 来美化，那我就需要一个 Bootstrap 风格的小部件。当时稍微看了一下，不知道怎么觉得很烦，想把前后端分开。准备去写一个 Flutter 的客户端。现在想起来也许是因为很早就想着用 Flutter 给 IOT 网站写前端，不想把更多的时间花在 HTML，Javascript还有 CSS 上。Flutter 这种跨平台的框架，特别适合我家里这种对性能要求不高的需求。并且 Flutter 写出来的程序看起来也挺好看的。我又去建立了一个 智慧家庭客户端 的仓库。不过这次就写了很久到现在才终于把物品管理的功能都在 Flutter 中实现。毕竟我虽然平时关注了一下 Flutter，但从来没有写过，甚至都不知道 Dart 的语法是怎么样的。现在用起来，感觉编译出来的 Android 软件很流畅。并且我也把网站也换成了 Flutter 编译出来的网页。虽然网页完全没有做大屏幕优化，看起来很丑，但也运行得很流畅。并且在爸的建议下，暂时把 IOT 和博客网站的链接都内置到软件中，这样智慧家庭软件便成为了（伪）完全体。接下来我就准备去把从去年就一直想着的升级和整合 IOT 网页的事情做了。顺便记录一下我在开发过程中用到的一些资料。DockerHub 加速器BLoC 文档还有我踩过的坑。通过 psql 恢复数据库的时候，必须要把之前备份数据中有自增 ID 的表中的 ID 项删除。不然直接恢复之后，会遇到 ID 不同步 的问题。不过我后面发现这个问题出现是因为我当时把 SQL 文件中后面的设置项删除。也就是 SELECT pg_catalog.setval('public.storage_item_id_seq', 593, true); 这些行删除导致的。其实导出的备份是包含了这些东西的。测试 Flutter 网页版时，需要 开启 Django 的 CORS，不然浏览器会自动拦截。