2014-11-15 64 views

回答

3

使用方法

每個處理程序類與像getpost名稱的方法,HTTP方法GETPOST等這些方法後函數處理請求。

對您的服務器的每個請求都將被路由到請求處理程序對象,該對象是某個請求處理程序類的新實例。因此,每個請求都會創建一個請求處理程序實例,並在發送HTTP響應後進行垃圾收集。

通過繼承webapp2.RequestHandler,您的處理程序類可以免費獲得一堆功能。例如,處理程序實例會將來自HTTP請求的數據解析爲字典並自動綁定到self,分別爲self.request.headersself.request.body

webapp2.RequestHandler類也提供self.response,這是你寫你的響應數據。

一旦新的請求處理程序實例被初始化,繼承的__init__方法將調用映射到HTTP請求方法的方法,因此假設請求爲GET,它將調用self.getwebapp2.RequestHandler類不實現這些方法;你的派生類可以。

響應

無論print也不是處理方法的返回值被用在這裏。你不用這個框架「返回響應」;你編寫對請求處理程序實例的(繼承)self.response屬性的響應。

您的實例繼承self.response.out.write(其別名爲self.response.write),它將其參數連接到響應正文,最初是一個空字符串。

注意:您可以撥打self.response.clear來清除響應主體。

當您從您的處理程序方法返回時 - getpost等 - 返回值被忽略。該框架使用self.response的狀態爲您自動創建和發送HTTP響應。

框架在幕後也有一些細微之處。

類在功能

主要優點是在繼承。通常,您將創建一個BaseHandler類,該類來自webapp2.RequestHandlerBaseHandler類將包含實際處理程序的核心功能。例如,它可能包含一些用於將數據轉換爲Web API的小型JSON包的邏輯。所有實際處理請求的類都將從您的BaseHandler派生。

您希望爲您的處理程序類自定義基類,以便從主要類派生,因此您可以編輯該基類。您希望該基類繼承自webapp2.RequestHandler,以便您的所有處理程序實例都繼承框架魔法。

有足夠的手使整個事情混淆,但一旦你明白了,很容易理解,並且節省了很多麻煩。從技術上講,你可以使用函數和字典來實現上述所有功能,但是Python是經典的面向對象的,所以它會很痛苦和奇怪。