2010-02-14 65 views
2

在GAE中,您可以說users.get_current_user()獲取當前登錄的用戶隱式的當前請求。即使多個請求正在被同時處理,這也是有效的 - users模塊在某種程度上知道代表get_current_user函數被調用的請求。我查看了開發服務器中模塊的代碼,它似乎使用os.environ來獲取與當前請求關聯的用戶電子郵件和其他值。Google App Engine中的請求感知代碼 - os.environ?

這是否意味着每個請求都獲得獨立的os.environ對象?

我需要實現類似於users.get_current_user()的服務,根據調用代碼處理的請求返回不同的值。假設os.environ是要走的路,我怎麼知道哪些變量名已被GAE使用(或保留)?

另外,有沒有辦法添加一個鉤子(或事件處理程序),在每個請求之前被調用?

回答

3

作爲the docs說,

一個Python網絡應用程序使用所述CGI 協議 App引擎的web服務器進行交互。

這基本上意味着恰好一個請求在一個時間被服務的任何給定的過程中(儘管,不同於真實CGI,一個過程可以連續重複用於多個請求,一前一後,如果它定義main功能在app.yaml派發的各個模塊中)。有關CGI定義和使用的環境變量的文檔,另請參見this pagethis one

App Engine定義的鉤子是在RPC層調用的,而不是HTTP請求。爲了攔截每個請求在獲得服務之前,您可以使用app.yaml將所有請求重定向到單個.py文件,並在重定向之前在該文件的main函數中執行攔截(或者,您可以在每個模塊的main開始處調用鉤子您正在使用app.yaml發送到)。

+0

感謝您的詳細解釋!在我的結尾,這被清除了一些混亂。實際上,我已經將所有(非靜態)請求重定向到一個.py文件。我可以將代碼添加到我的主體中,但我希望得到實際的Request對象的通知,所以我將重寫繼承自RequestHandler的類中的'initialize'方法,然後從該類繼承而不是直接來自RequestHandler。 – Cameron 2010-02-14 19:44:48

相關問題