2008-04-14

玩玩google appengine SDK

google appengine出來也好幾天了,
不過來不及申請試用,也還沒排到,所以只先玩玩它提供的SDK.

關於google appengine的介紹現在在網路上應該有很多,所以就不多做介紹,
那就直接來說一下開發環境.

他的環境很單純,只要先裝pythongoogle appengine sdk就可以了.
我是在windows(winXP)的環境下開發,安裝Python 2.5.2.

安裝pythonApp Engine時都使用預設的安裝設定就可以了.
App Engine的安裝目錄中(預設是 C:\Program Files\Google\google_appengine)會有下面這兩個檔案.

dev_appserver.py : 開發用的web server
appcfg.py : 用來將你的程式上傳到app engine

因為目前申請不到試用帳號,所以只會用到dev_appserver.py
安裝完pythonApp Engine後,就可以開始寫hello world了.

先建一個資料夾叫Helloworld,
我是建在c:\files\Helloworld

然後裡面建兩個檔案

helloworld.py : python script
app.yaml : 設定檔(記得檔名要正確,不然出現google.appengine.tools.dev_appserver.AppConfigNotFoundError的錯誤訊息)

helloworld.py內容如下

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'



app.yaml內容如下




application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: helloworld.py



建好後就可以啟動測試用的web了.



開啟一個dos命令視窗.



然後輸入




c:\Python25\python.exe "c:\Program Files\Google\google_appengine\dev_appserver.py" c:\files\helloworld




如果dos沒有出現任何錯誤,(下面是已經在測試寫入資料的動作後啟動畫面,所以跟第一次執行的畫面不太一樣...)



appengine001


那就可以開啟IE來瀏覽 http://localhost:8080/


這時就可以看到Hello, world!的網頁了.


如果你可以看到測試了話,就可以開始寫程式了...環境搞定,一切就簡單多了.


我遇到的問題大概就是找不到app.yaml,因為命名錯誤...


不然就是路徑問題,不過執行dev_appserver時直接使用完整的路徑就比較沒有甚麼問題了.



google appengine sdk上的教學文件


會先教你基本的google.appengine.ext.webapp的功能,


然後在教你使用google.appengine.api.users產生登入畫面跟存取使用者資料.


然後再透過webapp去處理表單資料,


可以處理接收表單料後,就是要存到資料庫中,而appengine提供了google.appengine.ext.db來操作,


在這邊要查詢資料的語法跟sql是有點類似的,但是這邊叫"GQL",



要建立一個"資料物件"(在這邊稱資料物件應該是會比稱資料表合適)的語法如下:




class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)



目前支援的型態請見 : Types and Property Classes


而執行查詢語法就像下面這樣.




greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")



或是用



 greetings = Greeting.gql("ORDER BY date DESC LIMIT 10")



而要下查詢條件的話,可以使用下面這三種方式



greetings = Greeting.gql("WHERE author = :1 ORDER BY date DESC",users.get_current_user())




greetings = Greeting.gql("WHERE author = :author ORDER BY date DESC",author=users.get_current_user())




greetings = Greeting.all()
greetings.filter("author =", users.get_current_user())
greetings.order("-date")



目前還不知道怎麼列出我到底建了那些資料物件...不知道有沒有可能寫個類似myphpadmin的功能...
如果要清空開發環境的資料庫的話,只要在啟動dev_appserver時加個--clear_datastore的參數,指令如下



c:\Python25\python.exe "c:\Program Files\Google\google_appengine\dev_appserver.py" --clear_datastore c:\files\helloworld



而appengine的api目前主要有四個功能 - Datastore,Users,URL Fetch,Mail


然後是教你怎麼使用模板(appengine是使用Django模版引擎),
以及教你怎麼修改設定檔讓你的開發web可以存取子資料夾及靜態檔案,
最後就是上傳你的程式到appengine了,不過沒有測試帳號,所以目前還玩不到...
以上是這一兩天是玩的結果...再來就等有試用帳號再說了...
張貼留言

Google以後可以查祖譜嗎?

今天看到一篇INDISE的文章 : 比爾蓋茲和賈伯斯,他們的孩子都是 14 歲才能用手機 想說比爾蓋茲不是有點年紀了嗎? 他的小孩應該也都不小了. 他們14歲時應該還沒有甚麼智慧手機吧… 說不定還是在BB call的年代. 所以就好奇的用google查一下有沒...