tornado

1.tornado是一個(gè)異步的http框架

2.常用模塊

importtornado.httpserver

importtornado.ioloop

importtornado.options

importtornado.web

這四個(gè)都是 Tornado 的模塊冒滩,在本例中都是必須的。它們四個(gè)在一般的網(wǎng)站開發(fā)中,都要用到,基本作用分別是:

tornado.httpserver:這個(gè)模塊就是用來解決 web 服務(wù)器的 http 協(xié)議問題,它提供了不少屬性方法轰绵,實(shí)現(xiàn)客戶端和服務(wù)器端的互通。Tornado 的非阻塞、單線程的特點(diǎn)在這個(gè)模塊中體現(xiàn)奈梳。

tornado.ioloop:這個(gè)也非常重要,能夠?qū)崿F(xiàn)非阻塞 socket 循環(huán)解虱,不能互通一次就結(jié)束攘须。

tornado.options:這是命令行解析模塊,也常用到殴泰。

tornado.web:這是必不可少的模塊于宙,它提供了一個(gè)簡(jiǎn)單的 Web 框架與異步功能,從而使其擴(kuò)展到大量打開的連接悍汛,使其成為理想的

3.優(yōu)化路徑捞魁,處理post,get請(qǐng)求

import textwrap

import os

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__":

????#解析命令行參數(shù)

? ? tornado.options.parse_command_line()

????#創(chuàng)建應(yīng)用程序

? ? app = tornado.web.Application(

? ? ? ? handlers=[

? ? ? ? ? ? #(r"/reverse/(\w+)", ReverseHandler),

? ? ? ? ? ? (r"/", ReverseHandler),

? ? ? ? ? ? (r"/wrap", WrapHandler)

? ? ? ? ],

? ? ? ? template_path=os.path.join(os.path.dirname(__file__),'templates'),

? ? ? ? debug=True

? ? )

????#設(shè)置http服務(wù)器

? ? http_server = tornado.httpserver.HTTPServer(app)

? ??#設(shè)置監(jiān)聽端口

? ? http_server.listen(options.port)

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

4.關(guān)聯(lián) 模板

import textwrap

import os

import tornado.web

from tornado.options import define, options

define("port", default=5678, help="run on the given port", type=int)

#自定義方法

def defiend(str):

? ? return '<<%s>>'% str

class BookHandler(tornado.web.RequestHandler):

? ? def get(self):

? ? ? ? title = self.get_argument('title',)

? ? ? ? self.render(

? ? ? ? ? ? 'book.html',

? ? ? ? ? ? title=title,

? ? ? ? ? ? header="books",

? ? ? ? ? ? books=[

? ? ? ? ? ? ? ? 'baiduren',

? ? ? ? ? ? ? ? 'huozhe',

? ? ? ? ? ? ? ? 'xiaowangzi'

? ? ? ? ? ? ],

? ? ? ? ? ? tag=defiend

? ? ? ? )

if __name__ == "__main__":

? ? tornado.options.parse_command_line()

? ? app = tornado.web.Application(

? ? ? ? handlers=[

? ? ? ? ? ? (r"/", BookHandler),

? ? ? ? ],

? ? ? ? #設(shè)置文件路徑

? ? ? ? template_path=os.path.join(os.path.dirname(__file__),'templates'),

? ? ? ? debug=True

? ? )

? ? http_server = tornado.httpserver.HTTPServer(app)

? ? http_server.listen(options.port)

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

5.模板繼承,主要在html頁面

? ? ? ? {%block header%}

? ? ? ? ? ? this is header

? ? ? ? {%end%}

? ? ? ? {%block content%}

? ? ? ? ? ?? this is content

? ? ? ? {%end%}

? ? ? ? {%block footer%}

? ? ? ? ? ?? this is footer

? ? ? ? {%end%}

6.tornado設(shè)置cookie

#-*- coding:utf-8 -*-

import tornado.httpserver

import tornado.ioloop

import tornado.web

import tornado.options

import os.path

from tornado.options import define, options

define("port", default=8000, help="run on the given port", type=int)

class BaseHandler(tornado.web.RequestHandler):

? ? #重寫父類的方法离咐,如果返回的是真值的說明登錄成功

? ? def get_current_user(self):

? ? ? ? print("get current user")

? ? ? ? return self.get_secure_cookie("username")

class LoginHandler(BaseHandler):

? ? def get(self):

? ? ? ? self.render('cookie_login.html')

? ? def post(self):

? ? ? ? #設(shè)置cookie(標(biāo)記已經(jīng)登錄)

? ? ? ? self.set_secure_cookie("username", self.get_argument("username"))

? ? ? ? self.redirect("/")

class WelcomeHandler(BaseHandler):

? ? @tornado.web.authenticated

? ? def get(self):

? ? ? ? self.render('cookie_index.html', user=self.current_user)

#清除cookie

class LogoutHandler(BaseHandler):

? ? def get(self):

? ? ? ? if (self.get_argument("username", None)):

? ? ? ? ? ? self.clear_cookie("username")

? ? ? ? ? ? self.redirect("/")

if __name__ == "__main__":

? ? tornado.options.parse_command_line()

? ? settings = {

? ? ? ? "template_path": os.path.join(os.path.dirname(__file__), "templates"),

? ? ? ? "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=",

? ? ? ? #設(shè)置xsrf防跨站攻擊

? ? ? ? "xsrf_cookies": True,

? ? ? ? "login_url": "/login"

? ? }

? ? application = tornado.web.Application([

? ? ? ? (r'/', WelcomeHandler),

? ? ? ? (r'/login', LoginHandler),

? ? ? ? (r'/logout', LogoutHandler)

? ? ], **settings)

? ? http_server = tornado.httpserver.HTTPServer(application)

? ? http_server.listen(options.port)

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谱俭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宵蛀,更是在濱河造成了極大的恐慌昆著,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件术陶,死亡現(xiàn)場(chǎng)離奇詭異凑懂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)梧宫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門征候,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祟敛,你說我怎么就攤上這事疤坝。” “怎么了馆铁?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵跑揉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)历谍,這世上最難降的妖魔是什么现拒? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮望侈,結(jié)果婚禮上印蔬,老公的妹妹穿的比我還像新娘。我一直安慰自己脱衙,他們只是感情好侥猬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捐韩,像睡著了一般退唠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荤胁,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天瞧预,我揣著相機(jī)與錄音,去河邊找鬼仅政。 笑死垢油,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的圆丹。 我是一名探鬼主播秸苗,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼运褪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玖瘸,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤秸讹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后雅倒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璃诀,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蔑匣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劣欢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裁良,死狀恐怖凿将,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情价脾,我是刑警寧澤牧抵,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響犀变,放射性物質(zhì)發(fā)生泄漏妹孙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一获枝、第九天 我趴在偏房一處隱蔽的房頂上張望蠢正。 院中可真熱鬧,春花似錦省店、人聲如沸嚣崭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽有鹿。三九已至,卻和暖如春谎脯,著一層夾襖步出監(jiān)牢的瞬間葱跋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工源梭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娱俺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓废麻,卻偏偏與公主長(zhǎng)得像荠卷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烛愧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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