我是一名初學者,並且很想知道爲什麼我們使用self.response.out.write
而不是print
,以及爲什麼我們首先使用類而不是函數來處理請求處理程序。有什麼特別的原因嗎?爲什麼GAE在函數上使用類和self.response.out.write並打印?
回答
使用方法
每個處理程序類與像get
和post
名稱的方法,HTTP方法GET
和POST
等這些方法後是函數處理請求。
對您的服務器的每個請求都將被路由到請求處理程序對象,該對象是某個請求處理程序類的新實例。因此,每個請求都會創建一個請求處理程序實例,並在發送HTTP響應後進行垃圾收集。
通過繼承webapp2.RequestHandler
,您的處理程序類可以免費獲得一堆功能。例如,處理程序實例會將來自HTTP請求的數據解析爲字典並自動綁定到self
,分別爲self.request.headers
和self.request.body
。
該webapp2.RequestHandler
類也提供self.response
,這是你寫你的響應數據。
一旦新的請求處理程序實例被初始化,繼承的__init__
方法將調用映射到HTTP請求方法的方法,因此假設請求爲GET
,它將調用self.get
。 webapp2.RequestHandler
類不實現這些方法;你的派生類可以。
響應
無論print
也不是處理方法的返回值被用在這裏。你不用這個框架「返回響應」;你編寫對請求處理程序實例的(繼承)self.response
屬性的響應。
您的實例繼承self.response.out.write
(其別名爲self.response.write
),它將其參數連接到響應正文,最初是一個空字符串。
注意:您可以撥打self.response.clear
來清除響應主體。
當您從您的處理程序方法返回時 - get
或post
等 - 返回值被忽略。該框架使用self.response
的狀態爲您自動創建和發送HTTP響應。
框架在幕後也有一些細微之處。
類在功能
主要優點是在繼承。通常,您將創建一個BaseHandler
類,該類來自webapp2.RequestHandler
。 BaseHandler
類將包含實際處理程序的核心功能。例如,它可能包含一些用於將數據轉換爲Web API的小型JSON包的邏輯。所有實際處理請求的類都將從您的BaseHandler
派生。
您希望爲您的處理程序類自定義基類,以便從主要類派生,因此您可以編輯該基類。您希望該基類繼承自webapp2.RequestHandler
,以便您的所有處理程序實例都繼承框架魔法。
有足夠的手使整個事情混淆,但一旦你明白了,很容易理解,並且節省了很多麻煩。從技術上講,你可以使用函數和字典來實現上述所有功能,但是Python是經典的面向對象的,所以它會很痛苦和奇怪。
- 1. 爲什麼javascript函數不打印
- 2. 爲什麼這個函數打印'undefined'?
- 3. 爲什麼使用java -jar調用print函數時不打印?
- 4. 爲什麼getline(...)在屏幕上打印?
- 5. 什麼Java「Dictionary」類型使用{}打印?
- 6. 爲什麼函數不打印列表中的值的總和?
- 7. 爲什麼在主函數中root的值被打印爲0?
- 8. 打印後爲什麼使用逗號?
- 9. 匹配並打印什麼+數量
- 10. 在GAE上打印html標籤programmaticaly Python
- 11. 爲什麼在Python中打印函數的返回值?
- 12. 爲什麼我不能在函數內打印結果?
- 13. 爲什麼在這種情況下print()函數不打印
- 14. 爲什麼要在函數中使用const和&while聲明類?
- 15. 爲什麼Log.d()和Log.v()不打印
- 16. 爲什麼print(())和input(())打印括號?
- 17. 爲什麼我不打印和圖像
- 18. 爲什麼不打印?
- 19. 爲什麼打印1?
- 20. 爲什麼'假'不打印?
- 21. 爲什麼打印兩次?
- 22. 爲什麼「curl_exec」打印「null」?
- 23. 爲什麼Exception不打印?
- 24. 爲什麼打印-0.0?
- 25. Python:爲什麼traceback打印?
- 26. 這爲什麼不打印?
- 27. 爲什麼打印出spospo?
- 28. 爲什麼 'setprofile' 打印此
- 29. 爲什麼python打印[...]
- 30. 在Python3打印函數中「*」的作用是什麼?
目前還不清楚你在說什麼框架。請更具體一些。 – alexanderlukanin13
這是webapp2。我已經更新了這個問題。 –