智慧家庭之物品管理
最近,因为新型冠状病毒的影响,我没法回到学校,这段时间一直是呆在家里。看着家里乱糟糟的,终于也下定决心趁着这段时间好好地整理一下。
以前我们也曾多次整理过家里的物品,不过都没能坚持太长时间。想着是不是因为没有给东西做记录的原因,这次便准备边整理边记录一下。
说到记录我第一反应便是用 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 网页的事情做了。
顺便记录一下我在开发过程中用到的一些资料。
还有我踩过的坑。
- 通过
psql恢复数据库的时候,必须要把之前备份数据中有自增ID的表中的ID项删除。不然直接恢复之后,会遇到 ID 不同步 的问题。不过我后面发现这个问题出现是因为我当时把 SQL 文件中后面的设置项删除。也就是SELECT pg_catalog.setval('public.storage_item_id_seq', 593, true);这些行删除导致的。其实导出的备份是包含了这些东西的。 - 测试
Flutter网页版时,需要 开启 Django 的 CORS,不然浏览器会自动拦截。