摘要:對參數類型進行檢驗,這里為當參數類型不合適是會拋出一個異常。將使用的第二個參數值作為默認值。而請求將從格式中取得指定的文本。這里需要正則表達式相關的知識,到了后面的學習中,必要時再去深入學習。到目前我們使用了,還支持任何合法的請求。
參考書籍《Introduction to Tornado》
1.1 Tornado是什么?
Tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠 強健,但卻在創建和編寫時有著足夠的輕量級,并能夠被用在大量的應用和工具中。此外,它還擁有處理安全性、用戶驗證、社交網絡以及與外部服務(如數據庫和網站API) 進行異步交互的工具。
1.2 Hello Tornado
下面是一個全功能的Tornado應用的基礎示例:
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web
在程序的最頂部,我們需要導入一些Tornado模塊,Tornado還包含一些其他模塊,但是在這個例子中,我們最起碼需要包含著四個模塊。
from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int)
這是一個有用的模塊(tornado.options)來從命令行中讀取設置。我們在這里使用這個模塊指定我們的應用監聽HTTP請求的端口。
如果一個與define語句中同名的的設置在命令行中被給出,那么他將成為全局options的一個屬性。如果程序使用了--help,程序會打印出你在define函數中help指定的參數文本。如果沒有指定值,可以用default=所指定的值來代替。type對參數類型進行檢驗,這里為int,當參數類型不合適是會拋出一個異常。
class IndexHandler(tornado.web.RequestHandler): def get(self): greeting = self.get_argument("greeting", "Hello") self.write(greeting + ", friendly user!")
這個例子中只定義了一個GET方法,在以后的實際應用中我們可以用到GET POST 等其他的HTTP方法。
這里的get_argument是RequestHandler的內建方法,從一個查詢字符串中獲取greeting的值。Tornado將使用get_argument的第二個參數值作為默認值。
這里的write方法也是RequestHandler種的一個有用的方法,它將字符串形式的參數寫入HTTP響應中。在這里是將greeting參數提供的值寫入greeting中,并寫到響應中。
if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
Demo:
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler): def get(self): greeting = self.get_argument("greeting", "Hello") self.write(greeting + ", friendly user!") if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
到這里 這個簡單的例子便可以實現了。
可以在命令行中實現,也可以在IDE中實現(個人使用的是Pycharm)
接下來是一個稍微復雜一點的例子,對字符串進行操作的例子:
import textwrap import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class ReverseHandler(tornado.web.RequestHandler): def get(self, input): self.write(input[::-1]) class WrapHandler(tornado.web.RequestHandler): def post(self): text = self.get_argument("text") width = self.get_argument("width", 40) self.write(textwrap.fill(text, int(width))) if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application( handlers=[ (r"/reverse/(w+)", ReverseHandler), (r"/wrap", WrapHandler) ] ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
這里的GET請求會返回URL路徑中指定的字符串的反轉格式。如/reverse/tornado返回odanrot。
而POST請求將從text格式中取得指定的文本。
這里需要正則表達式相關的知識,到了后面的學習中,必要時再去深入學習。
到目前我們使用了POST GET,Tornado還支持任何合法的HTTP請求。
HTTP狀態碼
404 Not Found #路徑無法匹配時返回404
400 Bad Request #調用一個么有默認值的get_argument函數,并且沒有找到給定名稱的參數,返回400
405 Method Not Allowed #傳入的請求使用了沒有定義過的HTTP方法,返回405
500 Internal Server Error #當遇到任何不能讓其退出的錯誤,也會返回500
PS:
看完第一章有一個基本的了解,但是關于web方面的知識還是比較少,譬如http方面。需要同時看《TCP/IP》
而且第一次寫這種筆記的話,有些贅述,但是好在可以讓自己更好的了解,有一個整理和總結對于學習而言亦有幫助。共勉
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37651.html
摘要:首先是的請求接著是的請求在本次分享中,我們介紹了的請求,包括請求,并將介紹如何使用和來測試該本次分享到此結束,歡迎大家交流 ??Tornado是現在的主流 Web 服務器框架,它與大多數 Python 的框架有著明顯的區別:它是非阻塞式服務器,而且速度相當快。得利于其非阻塞的方式和對 epoll 的運用,Tornado 每秒可以處理數以千計的連接,這意味著對于實時 Web 服務來說,T...
摘要:而這里的方法則是告訴來讀取模板文件,并將結果返回給瀏覽器。依舊可以使用,等條件控制語句,但是要記得以結尾。替換字符串中的字符為編碼形式。模塊模塊是封裝模板中包含的標記樣式以及行為的可復用組件。 表單和模板 import os.path import tornado.httpserver import tornado.ioloop import tornado.options impo...
摘要:學習筆記七數學形態學關注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學習筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現代方法基于區域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個提問: pyth...
摘要:從的開始分析的源碼很容易可以看出,通過繼承類定義自己的處理類,來處理請求。類的對象來處理的路由將于處理類組成,關聯起來。調用的來將和綁定在一起初始化一個的對象,由其來處理請求的路由,來利用建立的規則。 從tornado的 Hello,world 開始分析tornado的源碼 pythonimport tornado.ioloop import tornado.web class M...
閱讀 914·2021-11-22 13:54
閱讀 2843·2021-09-28 09:36
閱讀 2980·2019-08-30 15:55
閱讀 1952·2019-08-30 15:44
閱讀 544·2019-08-29 12:31
閱讀 2564·2019-08-28 18:18
閱讀 1199·2019-08-26 13:58
閱讀 1383·2019-08-26 13:44