1. 程式人生 > >[精華] 初識Tornado:一個簡單例子

[精華] 初識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   
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()

實際上我們大部分的工作是使用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