Tornado簡介

Tornado簡介:

Tornado是什么
  • Tornado是由python開發(fā)的Web框架。
Tornado可以做什么
  • 利用Tornado可以快速搭建一個高性能的web服務(wù)。
Tornado優(yōu)點是什么
  • Tornado是單線程異步的非阻塞服務(wù)器思犁,因此速度非晨梗快,相對于一般情況下來說图甜,如果同時連接數(shù)Django為3000個左右伯顶,那么Tornado為10000個。
Tornado學(xué)習(xí)如何
  • Tornado的學(xué)習(xí)成本非常低骆膝,是個非常容易學(xué)習(xí)使用的Web框架祭衩。

環(huán)境搭建:

1.虛擬機環(huán)境搭建如之前Django所講,虛擬機中創(chuàng)建虛擬環(huán)境阅签,安裝對應(yīng)的包掐暮,這里需要安裝pip install tornado;其他和Django一樣政钟;
2.在pycharm創(chuàng)建工程有別于Django創(chuàng)建路克,只需要創(chuàng)建普通python工程即可,然后再配置遠程連接养交,自動同步等如Django前面所講精算;

Tornado代碼簡單例子:

import tornado.ioloop   #開啟循環(huán),讓服務(wù)一直等待請求的到來
import tornado.web  #web服務(wù)基本功能都封裝在此模塊中

class IndexHandler(tornado.web.RequestHandler):          #在這里指定請求的資源碎连,類似Django視圖
    def get(self):
        self.write("Hello Tornado!")
application = tornado.web.Application([         #定義路由表
    (r"/",IndexHandler),    #根據(jù)路由配置灰羽,獲取什么資源,類似django url配置鱼辙。
])
if __name__ == "__main__": #當(dāng).py文件被直接運行時廉嚼,if __name__ == '__main__'之下的代碼塊將被運行;當(dāng).py文件以模塊形式被導(dǎo)入時倒戏,if __name__ == '__main__'之下的代碼塊不被運行怠噪。
    application.listen(8000) #創(chuàng)建了一個http服務(wù)器示例并綁定到給定端口,用此端口監(jiān)聽
    tornado.ioloop.IOLoop.instance().start() #啟動IOLoop實例的I/O循環(huán),同時服務(wù)器監(jiān)聽被打開。一直運行

路由

在tornado web框架中杜跷,路由表中的任意一項是一個元組,每個元組包含pattern(模式)和handler(處理器)傍念。當(dāng)httpserver接收到一個http請求矫夷,server從接收到的請求中解析出url path(http協(xié)議start line中),然后順序遍歷路由表捂寿,如果發(fā)現(xiàn)url path可以匹配某個pattern口四,則將此http request交給web應(yīng)用中對應(yīng)的handler去處理。
由于有了url路由機制秦陋,web應(yīng)用開發(fā)者不必和復(fù)雜的http server層代碼打交道蔓彩,只需要寫好web應(yīng)用層的邏輯(handler)即可。Tornado中每個url對應(yīng)的是一個類驳概。

啟動Tornado

  • tornado支持通過命令行參數(shù)來控制啟動
import tornado.httpserver
import tornado.ioloop
import tornado.options     #從命令行種讀取設(shè)置
import tornado.web

from tornado.options import define,options

#定義端口為8080
define('port',default=8080,help='run port',type=int)
define('version', default='0.0.1', help='version 0.0.1', type=str)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('welcome to index page!')

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('please login!')


app = tornado.web.Application([
    (r'/', IndexHandler),
    (r'/login', LoginHandler),
])

if __name__ == '__main__':
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(app)

    #如果一個與define語句中同名的設(shè)置在命令行中被給出赤嚼,那么它將成為全局的options的一個屬性 即 options.port 相當(dāng)于define的url的port
    http_server.listen(options.port) #python test2.py --port=8000 給定了8000端口,覆蓋define的

    tornado.ioloop.IOLoop.instance().start()

使用 python test2.py --port=8000啟動顺又,瀏覽器輸入url


image.png

輸入輸出

import tornado.httpserver
import tornado.ioloop
import tornado.options     #從命令行種讀取設(shè)置
import tornado.web

from tornado.options import define,options
#定義端口為8080
define('port',default=8080,help='run port',type=int)
define('version', default='0.0.1', help='version 0.0.1', type=str)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('welcome to index page!') #輸出更卒,類似Django中return HttpResponse('test')

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('please login!')
        name = self.get_argument('name','') #獲取url參數(shù)值,如果為空則給默認(rèn)值稚照,類似Django中request.GET.get("name","")
        self.write('<br/>get_argument->name:'+name)
        print(name)

        name = self.get_arguments('name') #得到參數(shù)值的列表蹂空,不能給默認(rèn)值
        self.write('<br/>')
        self.write('et_argument->names:'+','.join(name)) #將列表通過,拼接返回字符串
        print(name)

app = tornado.web.Application([
    (r'/', IndexHandler),
    (r'/login', LoginHandler),
])

if __name__ == '__main__':
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(app)

    #如果一個與define語句中同名的設(shè)置在命令行中被給出果录,那么它將成為全局的options的一個屬性 即 options.port 相當(dāng)于define的url的port
    http_server.listen(options.port) #python test2.py --port=8000 給定了8000端口上枕,覆蓋define的

    tornado.ioloop.IOLoop.instance().start()

啟動服務(wù):
python test2.py --port=8000
瀏覽器輸入

image.png

總結(jié):

  • 路由的定義和作用
  • Handler的定義和作用
  • 命令行傳入?yún)?shù)的方法和方式
  • 輸入輸出,write弱恒,get_argument / get_arguments,url傳入?yún)?shù)的方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辨萍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子返弹,更是在濱河造成了極大的恐慌锈玉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件义起,死亡現(xiàn)場離奇詭異拉背,居然都是意外死亡,警方通過查閱死者的電腦和手機默终,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門去团,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人穷蛹,你說我怎么就攤上這事土陪。” “怎么了肴熏?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵鬼雀,是天一觀的道長。 經(jīng)常有香客問我蛙吏,道長源哩,這世上最難降的妖魔是什么鞋吉? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮励烦,結(jié)果婚禮上谓着,老公的妹妹穿的比我還像新娘。我一直安慰自己坛掠,他們只是感情好赊锚,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屉栓,像睡著了一般舷蒲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上友多,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天牲平,我揣著相機與錄音,去河邊找鬼域滥。 笑死纵柿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的启绰。 我是一名探鬼主播昂儒,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酬土!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起格带,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撤缴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叽唱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屈呕,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年棺亭,在試婚紗的時候發(fā)現(xiàn)自己被綠了虎眨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡镶摘,死狀恐怖嗽桩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凄敢,我是刑警寧澤碌冶,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站涝缝,受9級特大地震影響扑庞,放射性物質(zhì)發(fā)生泄漏譬重。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一罐氨、第九天 我趴在偏房一處隱蔽的房頂上張望臀规。 院中可真熱鬧,春花似錦栅隐、人聲如沸塔嬉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邑遏。三九已至,卻和暖如春恰矩,著一層夾襖步出監(jiān)牢的瞬間记盒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工外傅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纪吮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓萎胰,卻偏偏與公主長得像碾盟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子技竟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 引言 以Django為代表的python web應(yīng)用部署時采用wsgi協(xié)議與服務(wù)器對接(被服務(wù)器托管)冰肴,而這類服務(wù)...
    大熊_7d48閱讀 2,049評論 0 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,996評論 1 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,502評論 6 427
  • 原創(chuàng) 文 夏瑜斐 一次偶然,一個幸運又幸福的機會榔组,我利用本地資源給小班成功上了一節(jié)美術(shù)專家點評課熙尉,課件是《一盤點心...
    夏瑜斐的小木屋閱讀 702評論 1 4
  • 愛情是什么? 我曾熱烈的追求它 直到荊棘刺穿我的身體检痰, 我還流著血 張開殘缺的翅膀 想飛到那神秘的天堂 或者地獄。...
    拈花醉流景閱讀 271評論 0 4