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