[精華] 初識Tornado:一個簡單例子
簡單的web services:
現在我們將開始瞭解什麼是tornado,tornado可以做什麼。我們來通過分析tornado實現的一個簡單web service 例子開始吧。
Hello Tornado
tornado 是一個可以處理http請求的框架,你的工作是作為一個程式設計師,編寫一個handlers來響應一個標準的http請求。,下面是這個例子的所有程式碼:
範例1:hello.py
import tornado.httpserver import tornado.ioloop import tornado.options importtornado.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 + ’, friendlyuser!’) 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()
實際上我們大部分的工作是使用tornado的介面去定義一個類來擴充套件tornado 的RequestHandler類,在這個例子中,我們將會定義一個簡單的應用來監聽從埠獲得的請求,並且返回一個響應值。
你可以通過命令列去試著執行和測試你自己的程式碼:
$ python hello.py –port=8000
$ curl http://localhost:8000/ Hello, friendly user! $ curl http://localhost:8000/?greeting=Salutations Salutations, friendly user!
讓我們回到這個例子下,一步一步對它進行分析吧!
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集成了一些有用的函式在tornado.options裡面,在這裡我們使用這個函式庫來完成監聽HTTP請求的應用,這些引數將會對所有物件生效,如果你是在命令列中輸入–help,你將會看到所有的幫助資訊及其定義。如果你沒有輸入一個值,那麼default變數後面的引數將會作為預設值開始執行,假如你輸入的是一個錯誤的型別,程式將會丟擲一個錯誤,在這裡允許使用一個整數型資料作為監聽的埠,如果沒有輸入任何資料,程式將會使用預設埠8000。
class IndexHandler(tornado.web.RequestHandler): def get(self): greeting = self.get_argument(‘greeting’, ’Hello’) self.write(greeting + ’, friendly user!’)
這是一個tornado處理請求的類,當出現請求時,tornado例項將會呼叫這個類和方法。在這個例子中,我們只定義了一個get方法,這意味著程式只能處理HTTP GET的請求,在後面我們將會學習到如何使用更多介面去響應HTTP不同的請求。
greeting = self.get_argument(‘greeting’, ’Hello’)
tornado的請求類擁有很多有用的方法,比如get_argument
,這個方法可以讓我們獲得請求字串中的變數(如果請求中不包含字串,tornado將會使用第二種方法替代get_argument,並使用預設值)
self.write(greeting + ', friendly user!')
第二個方法是使用一個請求的方法,當請求中有字串變數時,我們將會獲取這個字串,並且插入一個問候語響應這條請求。
if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
tornado的應用將會從這裡開始執行,首先我們通過tornado的options函式庫去解析命令,當我們建立一個tornado應用類的例項的時候,所有匯入的變數將會傳送到類的 __init__
方法中,這個方法將會告訴tornado需要呼叫哪一個handle
,我們將會在後面對此做詳細的說明。
http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
程式將從這裡開始執行,建立一個例項,我們通過應用tornado的HTTPServer物件來監聽指定的埠在命令列中獲取的資料,然後我們建立一個tornado的IOLoop例項,最後這個程式將會開始接收HTTP請求。
操作的變數
讓我們再回頭看看helly.py這個例子的第一行:
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
這個handlers非常重要,我們將會在後面對它進行更詳細的解釋,它是一個元組的列表,我們使用一個正則表示式將它與RequestHandler進行匹配,你可以新增更多的列表來指定更多需要匹配的RequestHandler
使用正則表示式來指定URL
tornado使用正則表示式來匹配URL的http請求(RequestHandler的類在URL後面,不包括主機名和查詢字串的片段),它們應該包含起始行和結束行。當一個正則表示式匹配一個HTTP請求時,匹配的內容將會作為引數傳遞給RequestHandler的類。我們將會在下一個例子瞭解到它是如何工作的。
字串服務
我們將通過一個稍微複雜一些的例子1-2去介紹更多關於tornado的設計理念.
例1-2 Handling input: string_service.py
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):相關推薦
[精華] 初識Tornado:一個簡單例子
簡單的web services: 現在我們將開始瞭解什麼是tornado,tornado可以做什麼。我們來通過分析tornado實現的一個簡單web service 例子開始吧。 Hello Tornado tornado 是一個可以處理http請求
Spring學習筆記(一):眼見為實,先上一個簡單例子
概述 所謂眼見為實,Spring雖然是一個輕量級的框架,但涉及眾多的概念,理解起來並不容易,因此,先參考資料寫一個簡單的Demo,從中洞見Spring的大體工作流程,為後面深入學習做鋪墊。 本文的Demo很簡單:模擬圖書資料訪問服務,即向資料庫中新增圖書資訊,涉及IBoo
一個簡單例子:貧血模型or領域模型
來源於:http://www.iteye.com/topic/283668 最近taowen同學連續發起了兩起關於貧血模型和領域模型的討論,引起了大家的廣泛熱烈的討論,但是討論(或者說是爭論)的結果到底怎樣,我想值得商榷。問題是大家對貧血模型和領域模型都有自己的看法,如
Webpack入門之一:從一個簡單例子入門
一、Webpack安裝 先在要使用Webpack的資料夾下初始化npm 執行npm init命令, 接下來是需要輸入一系列專案資料,直接回車跳過就可以了。 安裝Webpack 首先需要
主題:AspectJ的一個簡單例子
AspectJ已經很成熟,並且有一個成熟的編輯工具:AJDT (eclipse外掛) 下面介紹一個AspectJ的簡單例子,從而對AspectJ有一個直觀的認識: 在面嚮物件語言中,我們一般用一個類處理一個關注點的需求。 但是在很多情況下,類不僅要處理自己的關注點,還必
初遇C#:一個簡單的小程序(圓形周長,面積計算器)
編碼 雙精度 崩潰 輸入 面向對象 窗口 語句 readline 面向對象的語言 作為一個面向對象的語言,與用戶的交互很關鍵! 在此,我們可以先分析一下我們這個小程序要與用戶交互的內容:1.命名很重要,讓用戶看見這個程序就知道這個程序的作用。 2.當用戶打開這個程序時,提示
用socket.io實現websocket的一個簡單例子
soc .html www sock 在線 ket log html 簡單例子 http://biyeah.iteye.com/blog/1295196 socket.io的介紹 http://www.cnblogs.com/mazg/p/5467960.html
C語言多線程的一個簡單例子
color oid blog stdlib.h null bsp 等待 creat 多線程 多線程的一個簡單例子: #include <stdio.h> #include <stdlib.h> #include <string.h&
學習 WebService 第三步:一個簡單的實例(SoapUI測試REST項目)
方法 資源 ima .com required tle margin 導出 ont 原文地址:SOAPUI測試REST項目(六)——REST服務和WADL ↑↑↑ 原文用的SoapUI,2018-3-19時,這個軟件已經更名為ReadyAPI(集成了SoapUI),因此下文
初學html,任務1:一個簡單html頁面,要求:內容頁面裝一篇文章 用html來分段
enter pos 工程師 分享圖片 visit 技術 運行 並且 center 這是主要內容部分,用html實現版塊分布。 接下來是樣式部分。 讓頁面所有元素的padding和margin都設置為0 ; 否則加入一張大的覆蓋的背景圖片後,會由於瀏覽器的緣故,圖片周邊有
netsh interface portproxy的一個簡單例子
get 文檔 let pre interface 簡單例子 配置文件 exe CP netsh interface portproxy的微軟幫助文檔地址: https://technet.microsoft.com/zh-cn/library/cc776297(WS.10
使用java實現快速排序的一個簡單例子
fast val rgs 快速 實現 個數 static void sta public static void main(String[] args) { // 測試排序 Random r = new Random(); int arr[] = new
flask學習:一個簡單案例綜合之前學到的知識
黑馬的免費視訊課關於入門flask的我看完了,最後第五章實現了一個小案例,基本涵蓋了之前學到的所有知識。跟著敲了一遍,覺得還不錯,因此把程式碼在這裡分享一下。重要地方也都做了記錄。 前端截圖如下: (竟然支援qq截圖直接複製,csdn真的是越來越優秀了,點贊!!!) from
一個簡單例子解釋工廠模式建立物件
function createObject(name,age) { var obj=new Object(); obj.name=name; obj.age=age; obj.eat=function () { console.log(
Java產生死鎖的一個簡單例子
什麼是死鎖?所謂死鎖,是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。 因此我們舉個例子來描述,如果此時有一個執行緒A,按照先鎖a再獲得鎖b的的順序獲得鎖,而在此同時又有另外一個執行緒B,按照先鎖b再鎖a的順序獲得鎖。如下圖所示: &nbs
How Tomcat Works 2:一個簡單的Servlet 容器
這一章的主要內容是講解如何構造自己的Servlet 容器。 我們首先看一個servlet 容器需要做什麼工作來為一個servlet 來提供HTTP請求。 Servlet 程式設計是通過 javax.servlet 和 javax.servlet.http 這兩個包的類和介面來實現的。這裡面最
搜尋引擎快捷導航:一個簡單的chrome外掛(教程)
搜尋引擎快捷導航 使用方法 :下載crx副檔名檔案,拖入chrome應用管理介面即可 編寫一個簡單的chrome外掛(教程) 實現效果: 簡單理解:chrome擴充套件程式就是一個web應用
什麼是量子計算機?用一個簡單例子來解釋
譯者:王亮 作者:YK Sugi 原文:http://t.cn/EZAElk0 Hi,大家好! 不久前,我參觀了加拿大溫哥華的D-Wave Systems公司,這是一家制造前沿量子計算機的公司。 我在那裡學到了很多關於量子計算機的知識,所以我寫這篇文章來和大家分享我在那裡所學到的一些知識。
R in Action學習筆記:一個簡單的資料處理例項
這是來自《R in Action》中的一個數據處理例項。 資料:一組學生的名字和其對應的數學、科學、英語的成績; 資料分析需求: 1、為所有學生確定一個單一的成績衡量指標; 2、將前20%的學生評定為A,接下來20%的學生評定為B,依次類推; 3、按照學生姓氏的字母順序對學生排序。
初識TPOT:一個基於Python的自動化機器學習開發工具
1. TPOT介紹 一般來講,建立一個機器學習模型需要經歷以下幾步: 資料預處理 特徵工程 模型選擇 超引數調整 模型儲存 本文介紹一個基於遺傳演算法的快速模型選擇及調參的方法,TPOT:一種基於Python的自動機器學習開發工具。專案原始碼位於:https://github.com/EpistasisL