2013-02-16 65 views
0

我對谷歌應用程序引擎和python很新穎。成功上傳應用程序後,我堅持了一個基本問題。谷歌應用程序引擎在python中的應用程序體系結構

app = webapp2.WSGIApplication([ 
    ('/.*',IndexHandler) 
], debug=True) 

這是通常用於映射請求和處理它的類的代碼塊。但是,app.yaml中有一個部分允許指定單個url的處理程序。

我的問題是什麼是谷歌應用程序引擎上的Python應用程序的正確架構。如果我的應用程序有幾百個類來處理不同的請求呢?我是否必須在此代碼中指定所有這些類?

我已經使用Google搜索,但找不到滿意的答案。鏈接到一個好的教程或文檔將是一個很大的幫助。

回答

2

基本上,你定義app.yaml中使用的應用程序。例如,如果您有多個應用程序,則可以在此指定要使用的應用程序。

是的,您必須在此處指定所有允許的URL(在main.py中)。否則,請求將獲得404.但是,您可以使用正則表達式來使某些類型的地址與給定的處理程序匹配。

退房教程:https://developers.google.com/appengine/docs/python/gettingstartedpython27/usingwebapp

的文檔URI路徑:http://webapp-improved.appspot.com/guide/routing.html?highlight=url

0

app.yaml可用於設置諸如安全和登錄選項,但我個人不使用它們。
我使用main.py將所有的url映射到右邊的處理程序。

1

你可以這樣做。

app.yaml中

- url: /service/.* 
    script: service.app 

- url: .* 
    script: main.app 

在service.py

url_map = [ 
    ('.*/user.*', 'service.UserHandler'), 
    ('.*/data/show/', 'appname.service.DataShowHandler'), 
    ('.*/data.*', 'appname.service.DataHandler'), 
] 

app = webapp2.WSGIApplication(url_map) 

當您試圖訪問http://your-appid.com/service/user,AppEngine上會excecute UserHandler類的GET功能service.py其中位於根文件夾。

當您嘗試訪問http://your-appid.com/service/data/show時,appengine將優先於位於Root/appname文件夾中的service.py中的DataShowHandler類的GET函數。

+0

您的回答幫助我理解了python應用程序的行爲。這非常有幫助 – 2013-02-16 12:31:47

1

我有兩個anwers:

1)您可以使用webapp2的路由來處理請求和URI路徑。這是非常強大的。您可以使用網址模板和/或編寫您自己的自定義調度程序。

2)對於很多請求,您可以使用單個URL並使用會話/狀態來了解發布後如何繼續。這意味着:您不必爲每個請求使用請求處理程序。

+0

謝謝,這非常有用 – 2013-02-16 12:31:19