最近,因为新型冠状病毒的影响,我没法回到学校,这段时间一直是呆在家里。看着家里乱糟糟的,终于也下定决心趁着这段时间好好地整理一下。

以前我们也曾多次整理过家里的物品,不过都没能坚持太长时间。想着是不是因为没有给东西做记录的原因,这次便准备边整理边记录一下。


说到记录我第一反应便是用 Excel,想着一张表上登记上每件物品的名字和存放的位置,然后一张表上登记每个位置之间的关系。我自己填写了一下之后,发现登记很烦,而且手机上用这些软件也不方便。

正好,我前不久我看了看 Django 的教程,就想着这两张表,不就是一个关系模型么。不如写一个网站出来,把数据存放到专门的数据库里。然后针对手机优化一下,这样登记物品不就方便多了。心动不如行动,我又去重新看了一遍教程。


首先,去建立了一个叫 智慧家庭 的仓库来存放代码。之所以叫这个名字,也是因为之前我已经写过一个 IOT 网站,用来遥控家里的单片机控制电磁阀开关。前不久去看 Django 也是想着把 IOT 网站重写一下。这次正好就可以趁这个机会把这两个网站合并起来,家里的很多东西都信息化,智能化了,不就是个智慧家庭么🤣。

以前玩 Flask 的时候接触过模板系统,这次用 Django 也不算陌生,很容易就上手了。通过努力,我实现了位置和物品的添加,修改,删除功能。

网站主要分为两种类型的页面,一是位置的详情界面,展示当前位置下的子位置和物品,并且可以很方便的直接向当前位置添加物品或者位置。二是物品的详情界面,展示了这个物品的各种属性,如名称,数量,备注,存放位置,更新时间和录入者。

在使用网站来登记物品的过程中,我发现还需要一个新的属性,有效期。家里很多东西都是有保质期的,既然已经写了这样一个网站,那么给网站加上提醒最近过期物品的功能岂不更妙。


既然要添加日期,就需要 Datetime Picker。当前我网站的页面使用的 Bootstrap 来美化,那我就需要一个 Bootstrap 风格的小部件。当时稍微看了一下,不知道怎么觉得很烦,想把前后端分开。准备去写一个 Flutter 的客户端。

现在想起来也许是因为很早就想着用 FlutterIOT 网站写前端,不想把更多的时间花在 HTMLJavascript还有 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,不然浏览器会自动拦截。

标签: 物品管理, Django, Flutter, 智慧家庭