Google App Engine 及 Web Programming 簡介

Google App Engine(GAE)Google提供的一個平台,讓使用者可以在這個平台上開發同時託管網路應用程式(Webapp)。免費帳戶使用GAE服務時受配額限制,程式作者可以視需要付費購買資源。GAE帳戶申請以及使用請參考Google App Engine 入門指南

 

網路上除了Google提供的入門指南外,也可以找到不少參考資料:

另外處理中文可以參考app engine處理中文通用解法 @宅之力

 

底下是我(改)寫的兩個小程式給大家參考:

底下簡單說明一下第二個程式的內容:

  1. 因為要處理中文,所以程式開頭要加上 #coding=utf-8

  2. 程式最底下的部分

    application = webapp2.WSGIApplication([
        ('/', MainPage),
        ('/play', Playbook),
    ], debug=True)
    告訴Server網頁由哪個Handler處理:"/"由class MainPage處理;"/play"由class Playbook處理。
  3. class MainPage前的MAIN_PAGE_HTML、LOG_PAGE_HEADER_TEMPLATE及LOG_PAGE_FOOTER_TEMPLATE是網頁內容。在class MainPage裡可以看到輸出方式,例如self.response.write(MAIN_PAGE_HTML)。請參考HTML Forms and Google App Engine
  4. 網頁輸入方式有兩種:一種是在文字輸入欄內輸入資料(請看MAIN_PAGE_HTML)
           < form action="/play" method="post">
           < p>Name of Player 1 < /p>
           < div> < textarea name="player_1" rows="1" cols="30"> < /textarea> < /div >
           < p>Name of Player 2 < /p>
           < div> < textarea name="player_2" rows="1" cols="30"> < /textarea> < /div >
           < div> < input type="submit" name="PName" value="Submit"> < /div >
        </form> 
    另一種則是按鈕輸入(請看LOG_PAGE_HEADER_TEMPLATE)
     < form name="input" action="/play" method="post">
     < a href="/"> < button type="button">Replay< /button> < /a>
     < input type="submit" name="step" value="Throw Again">
     </form> 
    請注意input type裡的 name部分
  5. Handler 是以self.request.get(name)取得輸入資料,所以self.request.get('player_1')會得到 name="player_1"那一欄輸入的內容; 如果在第二個網頁按下Throw Again,則 self.request.get('step')會傳回"Throw Again";若沒按下則傳回""
  6. 程式裡有兩種中文處理方式:第一種是unicode string
    player1 = self.request.get('player_1')
    hp_msg_u = u"{0}擲出點數{1},目前點數{2}\n"
    hp2 = randint(1,6)
    html_txt= hp_msg_u.format(player1,hp1,hp1)
    
    第二種是byte string
    player2 = self.request.get('player_2')
    hp_msg = "{0}擲出點數{1},目前點數{2}\n"
    hp2 = randint(1,6)
    html_txt= html_txt + unicode(hp_msg.format(player2.encode('utf-8'),hp2,hp2),'utf-8')
    
    請注意第二種方式,首先在把player2填入hp_msg的format時需在欄位後加上.encode('utf-8'); 另一方面,由於html_txt在前面已經宣告是unicode string,所以要把byte string和unicode string加在一起需使用unicode轉換。
Last Modified 7/17/2013