李偉
App Inventor是目前廣受中小學(xué)生喜愛的圖形化移動(dòng)應(yīng)用開發(fā)軟件,通過(guò)這款軟件,用戶可以快速地開發(fā)簡(jiǎn)易的移動(dòng)應(yīng)用程序。App Inventor的數(shù)據(jù)存儲(chǔ)采用了多種方式,包括文本文件、TinyDB、TinyWebDB等,其中TinyWebDB屬于網(wǎng)絡(luò)微數(shù)據(jù)庫(kù),用戶使用此數(shù)據(jù)庫(kù),可實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)存儲(chǔ),從而實(shí)現(xiàn)開發(fā)網(wǎng)絡(luò)版應(yīng)用程序。
由于網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)需要服務(wù)器的支持,一般的用戶只能借助他人提供的遠(yuǎn)程服務(wù)器才可以使用這一功能,很不自由。在教學(xué)中,還常常因?yàn)檫h(yuǎn)程服務(wù)器的連接限制而導(dǎo)致測(cè)試失敗。因而,本文介紹一種基于Python的Flask框架開發(fā)App Inventor網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器的方法,讓任何計(jì)算機(jī)都能“搖身”變?yōu)榫W(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器,以滿足個(gè)人開發(fā)和日常教學(xué)的需求。
● 開發(fā)網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器的技術(shù)分析
1.網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)存儲(chǔ)機(jī)制
App Inventor開發(fā)的應(yīng)用程序,是通過(guò)TinyWebDB可以完成讀取數(shù)據(jù)與存儲(chǔ)數(shù)據(jù)的功能,其相關(guān)的數(shù)據(jù)結(jié)構(gòu)比較簡(jiǎn)潔,每條記錄只包含了tag(鍵)和value(值)兩項(xiàng)。
在利用網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)進(jìn)行“讀取數(shù)據(jù)”時(shí),其實(shí)質(zhì)是發(fā)送一條網(wǎng)頁(yè)form表單請(qǐng)求,類似于“/get? tag=tagvalue”這樣的一條請(qǐng)求語(yǔ)句,傳送一個(gè)tag值,服務(wù)器捕獲這個(gè)請(qǐng)求后,查詢數(shù)據(jù)庫(kù)中是否存在這個(gè)tagvalue值,假若存在,則將此值返回給APP。
而當(dāng)利用網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)進(jìn)行“保存數(shù)據(jù)”時(shí),其實(shí)質(zhì)同樣是發(fā)送一條網(wǎng)頁(yè)form表單請(qǐng)求。類似于“/get? stored=storedvalue”這樣的一條請(qǐng)求語(yǔ)句,傳送一個(gè)stored值,此stored值實(shí)際上是一個(gè)json格式的數(shù)組字符串,即["STORED", "tag","value"],以此告知服務(wù)器程序,需要保存的數(shù)據(jù)為:tag=“tag”,value=“value”。服務(wù)器捕獲這個(gè)get請(qǐng)求后,將此數(shù)據(jù)作為一條記錄存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)。
2.網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器開發(fā)技術(shù)
由網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)存儲(chǔ)機(jī)制可知,服務(wù)器程序應(yīng)提供兩項(xiàng)服務(wù),即數(shù)據(jù)讀取與數(shù)據(jù)存儲(chǔ)功能,其實(shí)質(zhì)是一個(gè)典型的Web應(yīng)用服務(wù)平臺(tái)。因此,只需搭建一個(gè)能提供數(shù)據(jù)讀取與數(shù)據(jù)存儲(chǔ)功能的Web應(yīng)用服務(wù)平臺(tái),并且在格式上進(jìn)行規(guī)范,即可替代原有的網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器。
3.開發(fā)環(huán)境選擇
程序主體采用目前廣受用戶喜愛的Python語(yǔ)言的Flask網(wǎng)頁(yè)框架進(jìn)行編寫,數(shù)據(jù)庫(kù)可以采用SQLite3模塊進(jìn)行構(gòu)建。由于數(shù)據(jù)傳輸中需要進(jìn)行json格式的轉(zhuǎn)換,因此還需要導(dǎo)入json模塊。
4.主要功能模塊設(shè)計(jì)
網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器由數(shù)據(jù)庫(kù)、服務(wù)器端等模塊構(gòu)成。
其中,數(shù)據(jù)庫(kù)用于數(shù)據(jù)的存儲(chǔ),服務(wù)器端部分屬于反饋系統(tǒng)的主邏輯,承載著響應(yīng)APP請(qǐng)求,讀取相應(yīng)數(shù)據(jù)返回APP、捕獲APP發(fā)送的數(shù)據(jù)并存儲(chǔ)到數(shù)據(jù)庫(kù)。
整體架構(gòu)如上頁(yè)圖1所示。
● 網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器的開發(fā)
1.數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)主要用于APP數(shù)據(jù)的存儲(chǔ)。對(duì)于最基本的服務(wù),可以設(shè)計(jì)一個(gè)數(shù)據(jù)表,并在數(shù)據(jù)表中設(shè)計(jì)兩個(gè)字段,分別為webtag與webvalue。本系統(tǒng)采用Python語(yǔ)言的SQLite3模塊構(gòu)建與操作數(shù)據(jù)庫(kù),其數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)如上頁(yè)表所示。建立數(shù)據(jù)庫(kù)的核心代碼如圖2所示。
2.網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器程序編寫
服務(wù)器端程序采用Flask網(wǎng)頁(yè)框架編寫,主要包括以下兩個(gè)主函數(shù)。
getvalue()函數(shù):用于接收APP端讀取數(shù)據(jù)請(qǐng)求,并返回json格式的目標(biāo)數(shù)據(jù)。函數(shù)設(shè)計(jì)如圖3所示。
storeavalue()函數(shù):用于接收APP端存儲(chǔ)數(shù)據(jù)請(qǐng)求,并將接收到的數(shù)據(jù)存儲(chǔ)于數(shù)據(jù)庫(kù)中。函數(shù)設(shè)計(jì)如圖4所示。
● 網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器的部署與應(yīng)用
1.啟動(dòng)服務(wù)器主程序
網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器編寫完成之后,即可在服務(wù)器計(jì)算機(jī)中以命令行的方式運(yùn)行主程序:python tinywebdb.py。假設(shè)服務(wù)器地址為“192.168.31.132:8080”。
2.編寫APP,并設(shè)置網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器地址
設(shè)計(jì)示例APP的界面如下頁(yè)圖5所示,網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)服務(wù)器地址設(shè)置如圖6所示。
本示例APP只實(shí)現(xiàn)兩個(gè)功能,即將文本框中輸入的tag值與value值存入網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)中;向服務(wù)器發(fā)送讀取數(shù)據(jù)請(qǐng)求,并將相應(yīng)tag值的返回值加以顯示。其邏輯設(shè)計(jì)如圖7所示。
3.調(diào)試
在APP編寫完畢后,使用AI伴侶進(jìn)行測(cè)試,結(jié)果如圖8所示。