• 沒有找到結果。

第四章 Android GPS 與 Google 雲端的整合

4.2 雲端程式開發

雲端的建置我們有使用到 Django,它是基於 Python 語言的高階網頁 框 架 , 可 以 讓 人 快 速 的 開 發 實 用 又 有 效 率 的 網 頁 程 式 , 它 使 用 MTV(Model- Template-View ,模型-模板-檢視)的設計模式,目的是為了 建立一個可靠的分割體系,使後續的程式修改、擴充和重複利用更加輕 鬆。MTV 的意義分別表示如下:

M(模型): 進行資料庫管理和資料庫的設計。

T(模板) : 進行軟體介面的設計。

V(檢視): 編寫軟體所需的功能。

圖 4.9 Python 主程式流程圖

上圖 4.9 是雲端的程式流程圖,本流程圖程式設計是將 Python 和 html 兩個部分做結合。

接下來跟著流程圖是介紹和講解開發時會需要寫和用到的 Python 和 html 的檔案:

 mobilegps.py:主程式(步驟 1)

這是主程式的檔案,它的作用是負責接收手機資訊,並將它與 html 做連結讓網頁有動作。主程式裡分了三部分,分別是:

 getloc(request):此函式是負責接收手機傳來的資訊,然後將手機傳 來的資訊再利用 GET[]此函式來接收資訊,接收到資訊後再利用 put()將資料放到資料庫中(步驟 2)。

 history(request):開啟歷史紀錄的函式(步驟 3、4)

在這部分是利用 m.Data.gql 去資料庫中抓取資料,再 history 此部分 中是抓取資料庫中所有的資料,然後再 render_to_response( { } )放置於 history 歷史網頁中。

render_to_response( { } )其實是建立一個網頁的物件,第一個引數會 放網頁的名稱,這可以將該網頁回傳給瀏覽器,第二個引數是放到網頁 中的變數。

 index(request):顯示最近紀錄(步驟 3、4)

index 這部分跟 history 的部分是一樣是利用 m.Data.gql 去資料庫中抓 取資料,但是在這部分利用了 fetch(6,0)來抓取資料庫最新的六筆資料,

一樣利用 render_to_response( { } )放置於 index 首頁中。

以上是 mobilegps.py 主程式的部分,但是在 GAE 的程式開發環境中 會有一些物件必須要用到以下將介紹程式中用到的物件。

 model.py: 它是建立一個資料庫的物件, 規定那個資料庫要有什麼樣 的內容(圖 4.10)。

因為要儲存手機傳來的資訊,所以必須要有資料庫來做儲存,我們 是載入 GAE 用來操作資料庫的模組,然後看要用什麼資料型態來儲存經 度、緯度、IMEI 等…,在主程式必須用 import model 將它加入。

圖 4.8 model.py

因為此程式是利用 Django 的方式來寫,所以就必須在 main.py 此檔 案裡將 Django 做加入的動作。圖 4.11 是將專案目錄下的 Django 的目錄 路徑加入 sys.path 列表中,Python 就會依據 sys.path 列表搜尋要使用的模 組。

圖 4.9 加入 Django 模組

 App.yaml:它是 GAE 的配置文件

在 App.yaml(圖 4.12)裡可以設定我們的應用程式名字、版本編號、

執行的語言,在文件中 script 設定為 main.py,這表示所有動態網頁的執 行都會經由 main.py 做處理。

圖 4.10 App.yaml

 Manage.py:可以用來啟動 Django 伺服器,運行所開發的網頁程式。

 settings.py:這是 Django 的配置文件。

上面這兩個檔案是 Django 的配置文件,在 settings.py 我們必須把 ROOT_URLCONF 這裡輸入 urls。

 urls: 這裡是設定當網址後面加上什麼檔名就會跑哪隻程式。

因為我們是用 Django,所以它的運作方式是當使用者輸入網址透過 瀏覽器發出 HTTP 要求後,伺服器就會對照 urls.py 來找到相對應的 python 程式進行處理。

圖 4.11 urls

因為主程式裡分了三部分,所以我們的 urls 裡是分別連到主程式 mobilegps 的各個部分如圖 4.15。就是表示使用者開什麼網頁它就會跑甚 麼程式,拿我們的首頁「http://gpsandroid.appspot.com/」為例,開這網頁 就是跑 mobilegps 主程式裡的 index 的程式。

講到網頁的內容就是 html 的部分了,步驟 4 在主程式裡是用

「render_to_response({})」這函式來跟我們的 html 做連接,括號裡面就是 要將我們從手機收到的資料跟我們建立的 html 合在一起丟到我們的瀏覽 器上。這樣使用者就會看到我們的畫面。

在 GAE 裡我們的 html 是利用結構化的模板系統,使用父模板、子 模板的關係。下面是我們建立的父子模板。

 父模板

 Container.html

它負責掌管所有基本的東西,簡單來講,子模板的內容會繼承父模 板的東西,例如像是一個選單(menu),我們只要對父模板編輯一次就可 以重複使用。父模板有一個主要語法「{% block content %}content{%

endblock %}」,這語法就是定義一個可以擴充的模板區塊,也就是要帶

 History.html

這是歷史紀錄的版面設計。

子模板裡都有「{% extends "container.html" %}」標籤宣告,表示子 模板會繼承父模板的意思。兩個子模板的內容被「{% block content %}」

「{% endblock %} 」所包含,這表示裡面的 html 要被代入對應的父模板 container.html 中的意思。

Python和html兩部分寫好後接下來就是上傳到GAE的部分了,因為利 用Eclipse來撰寫,程式會全部打包在我們命名的資料夾裡,所以可以方 便我們全部包在一起一次上傳,要將程式上傳至GAE前必須先把GAE的 環境架構好,GAE的環境架構在第三章已有講解,都準備好後我們要做 的是先打開命令提示字元,在裡面找到我程式的資料夾位置,在輸入以 下指令[13]:「Appcfg.py update mobilegps」此指令的Appcfg.py是SDK提供 的命令列工具,mobilegps則是我們的應用程式名稱,上傳中系統會要求 輸入在GAE申請註冊的帳號、密碼,一切無誤後即會上傳。上傳後可以 透過「http://gpsandroid.appspot.com/」的網址來瀏覽網頁,網址裡面的 gpsandroid為我們的註冊帳號。

相關文件