2009年5月17日 星期日

app.yaml / cron.yaml內容說明 (未完成)

app.yaml:

application: myapp
version: 1
runtime: python
api_version: 1

handlers:

- url: /
script: home.py

- url: /index\.html
script: home.py

- url: /stylesheets
static_dir: stylesheets

- url: /(.*\.(gifpngjpg))
static_files: static/\1
upload: static/(.*\.(gifpngjpg))

在常規表示式(regular expression)中有group的使用. 而已上表示式中的(.*\.(gifpngjpg))即為一個group, 當有符合這個group表示式的字串被辨識(上例即為任何.gif .png .jpg 檔,也就是常用的圖型檔檔名), 這時會以 \1 (數字1)來表示這一個 group的內容, 若在 url 中有設定多個 group的pattern, 下方則可依序以 \1 \2 \3 ...... 來表示.

又如下例, url中的 (.*?) 為第一個 group, (.*)為第二個group, 若今有一URL /item-123/category-456 被request, 則他所對應到的實體位置則是在 /archives/456/items/123
handlers:
- url: /item-(.*?)/category-(.*)
static_files: archives/\2/items/\1


- url: /admin/.*
script: admin.py
login: admin

- url: /.*
script: not_found.py




cron.yaml

cron:
- description: daily summary job
url: /tasks/summary
schedule: every 24 hours

- description: monday morning mailout
url: /mail/weekly
schedule: every monday 09:00 timezone: Australia/NSW


("every"ordinal) (days) ["of" (monthspec)] (time)

every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday 09:00
1st monday of sep,oct,nov 17:00
every day 00:00

2009年5月15日 星期五

申請使用Google App Engine專案

要將自己在本機端撰寫好的Google App Engine專案上傳到Google平台供他人使用, 必須得要申請開通帳號. Google App Engine開發人員必須有Google帳號才能新增自己的Google App Engine專案,接下來就先打開瀏覽器連到 http://appengine.google.com/ 來登入Google App Engine首頁來新增自己的Web應用程式專案。 下圖為Google App Engine登入頁面。



登入之後,若是第一次使用的開發人員會看到如下圖的歡迎頁面。在此就先點選Create an Application來新增自己的Web應用程式專案。




點選這個按鈕來新增一個Google App Engine Web應用程式。


接下來則是透過手機來認證。 在Country and Carrier的選項是要選取使用者的所在國家以及提供手機服務的公司,不過目前僅只有美國、加拿大及日本地區的手機服務提供廠商有列出,因此這個選項就使用預設的Other (Not Listed)的選項,接下來則是要填入自己的手機號碼。 在此欄位所填寫的是完整的國際電話碼,台灣的國碼為886,若使用者的手機號碼為 0912345678 ,則須填入 +886912345678 ,填寫完畢後只按下 Send 送出即可,接下來大約過數分鐘的時間即可在自己的手機上收到認證碼。


由於在此條列的部分只有美加地區以及日本的電信服務公司,因此我們就選取Other (Not Listed)選項。 輸入自己的手機號碼包含國碼+886



接下來的表單則是需要使用者填入手機所收到的認證碼來作手機認證,填寫完之後送出即可。
在此輸入發送到手機上的註冊碼來通過認證。



通過認證之後即出現 Create Application 的頁面可新增自己的Google App Engine Web應用程式。 首先是先填入 Application Identifier ,這個 Application Identifier 結合 .appspot.com 則成為一個完整的、可供存取的Web應用程式URL;appspot.com 這個網域名稱則是Google App Engine所註冊使用的 (使用者應該對於同由Google所支援的部落格空間 blogspot 空間有印象吧!)。 在此應該要注意的是,這個ID只接受1~32碼的小寫字母、數字以及連線符號( - )所組成,輸入之後可以利用 Check Availability 來檢查是否已有人使用。 

筆者輸入包含大小的ID則出現了錯誤的情形:



所輸入的ID則符合Google App Engine的要求:




自訂專案名稱(Application Identifier)。



接著是給這個 Web應用程式一個名稱描述。目前只支援由4~30碼大小字母、數字、引號( ' )、句號( . )、連線符號( - )以及驚嘆號( ! )所組成的名稱 。

當筆者輸入中文名稱實則會發生下圖一的錯誤!


為了能夠順利新增自己的Web應用程式專案,還是乖乖地填入按照Google所限定的名成規格 。 



再來會有一個關於認證相關的選項設定。Google App Engine提供了一套User API 供Web應用程式開發員來使用:當使用者要瀏覽或存取使用Google App Engine User API 認證之Web應用程式時則會被導入到Google帳號登入頁面,使用者必須輸入自己的Google帳號及密碼來認證,認證過後則會回到原頁面,或者Web應用程式本身希望使用者所見到的頁面 (如客製化的登入歡迎頁面)。在預設的情況下,Google App Engine應用程式對所有具有Google帳號的使用者是不予設限的(Open to all Google Accounts user)。



按下 edit 選項後會出現兩個選項:前述之Open to all Google Account Users (default) 以及 Restricted to the following Google Apps domain。 後者所提到的Google Apps (中文名稱為Google應用服務) 與 Google App Engine並不相同;Google 應用服務主要是針對特定的團體、公司、學校等單位內部成員提供整合性或者特定之服務 (詳細說明可到 http://www.google.com/a/help/intl/zh-TW/index.html 查詢)。 



這樣認證方式的好處在於,當Web應用程式開發人員針對某個團體開發一套系統時 (如針對某個中小企業公司開發特定的工時系統) ,預設的情況下只有該團體的使用者才能夠登入使用,採用Google應用服務的domain名稱就能夠很輕易地將該團體的成員包含到這套系統的合法使用者名單下了。 這樣可以說是由Google來為該團體及Web應用程式作使用者群組管理,大大地減輕Web應用程式開發人員的負擔。

最後則是同意使用條款的選項,當使用者同意並勾選Google App Engine所條列之使用限制後,即可點選 Save 來新增第一個 Web應用程式。

在正常無誤的情況下,按下確定後則會出現以下的新增應用程式成功畫面。此時使用者可以點選 dashboard 連結來檢視我們剛剛建立的Web應用程式 eat-ben-don 的執行效能及資源使用情況,或者點選 Add developers to collaborate on this application 的連結來新增此Web應用程式的共同管理開發員。




在新增完第一個Web應用程式之後,使用者仍可再登入到 http://appengine.google.com 中新增其他的Google App Engine Web應用程式,Google App Engine預設每個帳號可提供最多10個Web應用程式domain的申請 (Web應用程式domain即其對應的 application-id.appspot.com 這樣的URL)。 管理頁面中會顯示每一個Google App Engine目前最新的版本 (下圖中因為剛增加新的Web應用程式,所以就未顯示目前的版本編號) ,Web應用程式開發員則可點選Web應用程式的ID進入到該應用程式之 dashboard 介面作管理以及效能檢視。

2009年5月11日 星期一

Google App Engine Template 樣板功能 tutorial (一)

樣板功能(template)提供程式開發人員能將應用程式的外觀與程式邏輯分開的能力, 讓負責UI設計的人員只需專注於設計外觀介面, 負責程式流程執行的人員專心程式邏輯的正確性. 現有許多Web應用程式framework如PHP, ASP.NET都提供template的功能, Google App Engine 也不例外. 以下將來簡單介紹 GAE template功能的使用.

1.建立一個專案(eg. template-demo). 分別加入 app.yaml 以及 index.py 兩個必要的程式. (index.py程式名稱可自行命名, 非強制限定)

2.在專案目錄下新增一個名為 template 之目錄 (約定俗成大都會以此名稱來命來, 也可縮寫成tpl), 並新增一個檔案內容為 index.htm, 這個檔案即是樣板檔案.

3.接著打開 index.htm 檔案中加入以下內容:

如此一來, 一個基本的 template 網頁樣板就已經完成了. 其中由雙分號 {{ }} 所包含的部分Welcome_msg 這部分可以由撰寫程式邏輯的設計人員決定該輸出哪些內容, 內容本身可以是純文字或者一段 html 語言. 開發人員也可以依照程式的需求加入更多 {{ }} 輸出樣板.

4.再來就要處理程式邏輯的部分了, 在 index.py 中的主要處理函式 (假設命名為 Main_handler ) 加入如以下內容:

import os
.................................
from
google.appengine.ext.webapp import template
.................................

class Main_handler(webapp.RequestHandler):
  def get(self):
    template_value = { 'Welcome_msg': 'Hello, Template!' }
    path = os.path.join(os.path.dirname(__file__),'template/index.htm')
    outstr = template.render(path, template_value)
    self.response.out.write(outstr)



其中 import os這行是因為後面程式當中需要由檔案系統路徑來讀取樣板檔 template/index.htm , 而從檔案系統讀取檔案路徑的函式包含在 os 這一個 package 當因此在程式前面必須宣告並引入; from google.appengine.ext.webapp import template 這行即是引入 Google App Engine 中 template 的函式庫.

而在 Main_handler 這個類別的 get 處理函式 (也就是當 index.py 接收到 GET request 被載入時所觸發執行的函式) 當中, 先看第一行:

  template_value = { 'Welcome_msg': 'Hello, Template!' }

這是一個Python的 dictionary 物件, 是一個類似陣列的物件, 不過他內部所儲存的都是一對一對(pair)的資料內容. 而 template_value 這個物件在之後則會被用來當作對照查表並替換符合其中一對一對的資料配對內容. (如本例即是找到 Welcome_msg 這個文字串並以對應的 'Hello, Template!' 來替換)

  path = os.path.join(os.path.dirname(__file__),'template/index.htm')

這是設定一個路徑的物件指向樣板檔案的路徑, 也就是 template/index.htm, 由於 template 目錄與 index.py 檔同路徑, 因此只要撰寫成以上的格式即可.

  outstr = template.render(path, template_value)

這一行就是 template 處理中最主要的一行了, 透過 template 類別中的 render 函式產生最後的 html碼. render 函式共需要輸入兩個參數, 一個就是路徑物件, 另一個則是 物件. render 函式的目的就是找到路徑物件所指向的樣板檔 (也就是 index.htm這個檔 ), 將對應的樣板代碼作代換的動作, 即把樣板檔中的 {{ Welcome_msg }} 這個代碼 轉換成 template_value 物件中'Hello, Template!'的內容. 最後再由 self.response.out.write( ) 輸出最後的 html 碼內容.

5. 最後則可以看一下完成後的結果.



看到出現了 Hello, Template! 字樣就表示已經成功了!

6.以上已經是基本的 template 功能的使用. 不過大部分的使用者還是喜歡用自己慣用的語言來開發Web應用程式, 在此我們可以嘗試將原本 index.py 檔中設定 template_value 的部分, 將 'Hello, Template!' 這段文字改成 '您好, 這是一個樣板功能網頁', 存檔後測試看看會輸出什麼結果?



7.會發生這樣錯誤的原因是因為 Python 對於 unicode 文字必須額外處理. 除此之外, 還得需要利用unicode編碼的函式來對中文字體作編碼解碼. 我們先額外宣告一個變數來代表字串:

  hello = unicode('您好, 這是一個樣板功能網頁', 'utf-8')


這行程式碼必須放置在 template_value 的前面才行, 他的內容表示將 '您好, 這是一個樣板功能網頁' 這一串字串以 utf-8 格式作編碼, 並指定給 hello 這個變數. 接下來在 template_value 這個物件內輸入對應的字串:

  template_value = {'Welcome_msg': hello.encode('utf-8')}


原本的中文字串以變數 hello 代替, 且將 hello 以 utf-8 格式編碼. 此外, 在編輯完 Python 的 script 檔之後, 也必須在檔案最前頭加註一行


  #-*- coding: UTF-8 -*-

來宣告這個檔案內容包含 unicode 的內容, 如此一來這個 Python script 檔才會被以 unicode 的編碼來儲存, 也就不會有剛剛的錯誤發生且能正常顯示中文內容的網頁了.



到了這邊, 如何利用樣板產生最基本的正體中文內容的網頁已經ok了, 在接下來的tutorial (二) 的部分我們會在介紹其他 template 相關的應用.

2009年5月10日 星期日

Eclipse + Pydev 打造Google App Engine 開發執行環境

1.首先請先到 http://eclipse.org/downloads/ 依照使用者所使用平台下載適用版本之Eclipse classic (目前撰文時最新版本為3.4.2)

2.檔案下載到本機端後為zip格式壓縮檔, 請解壓縮到個人家目錄 (或者其他使用欲放置之位置). 解壓縮後即產生一個 eclipse 目錄, 目錄中之 eclipse 執行檔即是eclipse開發環境主程式.

3.進到eclipse目錄中, 執行eclipse執行檔. 選擇工作目錄時用預設值即可 (~/workspace/).

Part I: 將Pydev元件加入到Eclipse開發環境.

4.選取工作列 Help 選項中之 software update 打開 Software Updates and Add-ons 子視窗. 切換到 Available Software 分頁, 選取右方 Add Site 按鈕來輸入 Pydev 更新網址 http://pydev.sourceforge.net/updates/ 按 ok 確認.

5.全部選取剛剛新增之 Pydev 選項, 按 install 紐開始安裝. 安裝過程會有License同意頁面, 同意之後到最後安裝結束, 重新開啟 Eclipse主程式.

Part II: 指定Pydev專案使用之Python直譯器

6.在Eclipse開發環境下, 選取工作列 Window 下之 Perference 選項. 選取樹狀選單中 Pydev 子選項之 Interpreter - Python 選項. 於右邊 Python interpreters 部分按 New 指定 python 直譯器所在之路徑 (ubuntu下於 /usr/bin/Python25, Windows下為預設之Python安裝路徑下之pythonw.exe ). 選取之後按 ok 確認.

Part III: 新增GAE專案設定

7.在eclipse開發環境下, 選取工作列 File > New > Project... 來新增project, 選取 PydevPydev Project 選項按 next.

8.Project Name 填寫使用者欲使用之專案名稱(申請之appspot.com應用程式名稱); Project contents為專案目錄放置之位置, 使用預設值即可; Project type 則使用Python, version 選取2.x最新之版本 (Python 3.x版本與 2.x版本相容性仍不高建議不要選取3.x版本), Interpreter選預設即可; Create default 'src' folder and add it to the pythonpath 選項可選可不選. 按 Finish 完成設定.

Part IV:加入Google App Engine SDK目錄連結

9.回到主畫面後, 到左方 Pydev Package Explorer 中剛剛新設的 Pydev 專案上按右鍵, 選取 New > Folder , Folder name填入名稱(例如 google_appengine), 點選下方 Advanced 按鈕, 勾選 Link to folder in the file system 選項並指定到 Google App Engine SDK安裝目錄之路徑, 按 Finish 完成.

Part V:設定執行及除錯選項.

10.到 Pydev Package Explorer 中 Pydev 專案上按右鍵, 選取 Run As > Run Configurations... , 打開 Run Configurations 設定選單, 選取樹狀選單中 Python Run > New_configuration 選項.

11.Name可改成 appcfg ; 在 Main 分頁中, Project 內容填入目前專案之名稱; Main Module 則選取專案目錄下 google_appengine 子目錄中之appcfg.py ; 切換到 Arguments 分頁, Program arguments: 中填入 . update ; Working directory 選取 other 並指定專案所在目錄; 按 Apply 完成設定, 按 close 離開.

12.在工作列上, 找到執行之按鈕, 旁邊多一個下拉的選項, 點選之後會出現剛剛設定之 appcfg 的選項. 也就是當使用者撰寫完專案時, 只要選取這個 appcfg 的選項, 則會自動將專案上傳到 GAE 平台.

13.若使用者只想在本機端作測試, 則可重複10~12的步驟新增一個 dev_appserver , 並指定 Main Moduledev_appserver.py 並設定相關參數即可.