Tornado初識(shí)

python web的第二個(gè)重要的框架--->Tornado

  • 官方中文文檔
  • tornado特點(diǎn)~功能少但是非常精巧的一個(gè)web框架
    • 高并發(fā)高性能,異步非阻塞IO,websocket長連接,內(nèi)置高性能HTTP服務(wù)器

  • 安裝
  pip install tornado 安裝tornado模塊
  # tornado程序開發(fā)可以在windows下進(jìn)程来惧,但是項(xiàng)目部署一定要在linux上進(jìn)行部署.
  • 編寫Tornado項(xiàng)目
    • 注意:tornado web程序純手工開發(fā),不像Django一樣自動(dòng)生成項(xiàng)目結(jié)構(gòu),要注意編程步驟
  • 引入需要的模塊
   from tornado.web import Application, RequestHandler
   form tornado.ioloop import IOLoop
  • RequestHandler:tornado web框架核心的一個(gè)處理類,主要進(jìn)行用戶請(qǐng)求對(duì)象的處理
  • Application:tornado web框架核心的處理類,主要進(jìn)行web應(yīng)用程序的包裝
  • IOLoop:tornado web服務(wù)器的核心處理類,主要進(jìn)行輪詢監(jiān)聽請(qǐng)求

  • 開發(fā)視圖處理類
    • 繼承 RequestHandler 妓肢,為了處理不同的請(qǐng)求方式授段,需要重寫父類中的請(qǐng)求處理方法
    # 定義一個(gè)視圖處理類
    class IndexHandler(RequestHandler):
         # 重寫父類處理get請(qǐng)求的方法
         def  get(self):
              # 通過self.write()可以直接向客戶端響應(yīng)數(shù)據(jù)
              self.write(“hello tornado!”)

  • 定義web應(yīng)用程序,啟動(dòng)服務(wù)器
    # 程序運(yùn)行的入口
    if __name__ == "__main__":
          # 根據(jù)視圖處理類構(gòu)建一個(gè)web application
          app = Application(
              [
                     # 定義路由訪問 
                     (r’/’, IndexHandler),
              ]
          )
          # 監(jiān)聽端口
          app.listen(8000)
          # 啟用tornado內(nèi)置服務(wù)器事件輪詢監(jiān)聽
          IOLoop.current().start()
  • 此時(shí)一個(gè)最基礎(chǔ)的tornado項(xiàng)目創(chuàng)建成功秸架,此時(shí)就可以添加各種功能豐富項(xiàng)目

  • 添加內(nèi)置服務(wù)器
    # 引入需要的模塊服務(wù)器模塊
    from tornado.httpserver import HTTPServer
       ......
       #將創(chuàng)建好的APP添加到服務(wù)器中唯沮,再進(jìn)行輪詢監(jiān)聽
       server = HTTPServer(app)
       server.listen(8000)
  • tornado默認(rèn)單進(jìn)程
    # 將web application 部署到Server中
    server = HTTPServer(app)
    server.bind(8000)# 綁定8000端口
    server.start() # 啟動(dòng)服務(wù)器伏尼,如果不設(shè)置參數(shù)或者參數(shù)為1忿檩,默認(rèn)啟動(dòng)1個(gè)進(jìn)程
    # 不設(shè)置參數(shù)或者參數(shù)為0,根據(jù)當(dāng)前操作系統(tǒng)的核心數(shù)量創(chuàng)建進(jìn)程數(shù)量
    # 如果設(shè)置了大于0的參數(shù)爆阶,默認(rèn)啟動(dòng)指定數(shù)量的進(jìn)程

  • 其他操作
    • 程序中定義變量
    # define定義變量燥透;options獲取變量
    from tornado.options import define, options

    # 定義一個(gè)變量,用于保存端口
    define("port", default=8000, type=int, help="端口默認(rèn)使用8000")
    #取出變量用 :options.port
    server.bind(options.port)
  • 應(yīng)用程序接受命令行參數(shù)
    #引入需要的模塊
    from tornado.options import define, options, parse_command_line

    # 定義變量
    define("port", default=8000, help="默認(rèn)8000扰她,可通過--port=9000來指定")
    #在啟動(dòng)程序中監(jiān)聽命令行參數(shù)
    if __name__ == "__main__":
         # 開始監(jiān)聽接受命令行參數(shù)數(shù)據(jù)~命令行的數(shù)據(jù)參數(shù)兽掰,必須是通過define指定
         parse_command_line()
         # 當(dāng)我們啟動(dòng)服務(wù)器時(shí)可以通過輸入 python demo01.py --port=8000

  • 手工多進(jìn)程
    # 應(yīng)用程序設(shè)定為接受命令行參數(shù)
    #使用同一個(gè)web應(yīng)用程序,啟動(dòng)多個(gè)獨(dú)立的進(jìn)程
    python demo.py --port=8000 工作在8000端口的一個(gè)單進(jìn)程單線程的程序
    python demo.py --port=9000 工作在9000端口的一個(gè)單進(jìn)程單線程的程序
    #多個(gè)進(jìn)程手工部署
    #web應(yīng)用程序就是多個(gè)獨(dú)立的進(jìn)程共同工作提供服務(wù)
    #場景:項(xiàng)目需要更新時(shí)~添加了一個(gè)非常重要的功能[3個(gè)獨(dú)立進(jìn)程]
    #停止1個(gè)進(jìn)程~更新代碼~重新部署啟動(dòng)[其他2個(gè)進(jìn)程正常工作徒役,
    #不會(huì)影響用戶的體驗(yàn)~不會(huì)因?yàn)橄到y(tǒng)更新需要服務(wù)器重啟導(dǎo)致業(yè)務(wù)中斷]
  • 設(shè)置網(wǎng)頁和靜態(tài)資源, debug
    #導(dǎo)入模塊
    import os
    BASE_DIR=os.path.dirname(__file__)
    app = Application(
            ......
          # 添加配置孽尽,告訴tornado我們的網(wǎng)頁模板在項(xiàng)目的那個(gè)位置
          template_path=os.path.join(BASE_DIR, "templates"),
          # 添加配置,告訴tornado我們的靜態(tài)資源文件在項(xiàng)目那個(gè)位置
          static_path=os.path.join(BASE_DIR, "static"),
          # debug配置~默認(rèn)True忧勿,項(xiàng)目發(fā)布修改為False杉女,顯示的是錯(cuò)誤信息
          debug=True,
    )

  • get/post參數(shù)處理[表單處理]以及模板語法
    # get post 接收傳遞數(shù)據(jù)
    def get(self):
         # get特有的接受參數(shù)方式
         name = self.get_query_argument("name")
         fav = self.get_query_arguments("fav")

    def post(self):
         # post特有的接受參數(shù)方式
         account = self.get_body_argument("account")
         fav = self.get_body_arguments("fav")

    # 通用接受參數(shù)方式
    name = self.get_argument("name")
    fav = self.get_arguments("fav")

    # 返回?cái)?shù)據(jù)
    user = {"name": name}
    self.render("index.html", user=user)

    # 模板語法,jinjia2
    {% if books %}
    {% else %}
    {% end %}

    {% for book in books%}
    書名:{{book['name']}}
    單價(jià):{{book['price']}}
    數(shù)量:{{book['buycount']}}
    小計(jì):{{book['price'] * book['buycount']}} #可以計(jì)算鸳吸,但沒有 empty
    {% end %}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熏挎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晌砾,更是在濱河造成了極大的恐慌坎拐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养匈,死亡現(xiàn)場離奇詭異哼勇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)呕乎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門积担,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猬仁,你說我怎么就攤上這事帝璧。” “怎么了湿刽?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵的烁,是天一觀的道長。 經(jīng)常有香客問我诈闺,道長撮躁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮把曼,結(jié)果婚禮上杨帽,老公的妹妹穿的比我還像新娘。我一直安慰自己嗤军,他們只是感情好注盈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叙赚,像睡著了一般老客。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上震叮,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天胧砰,我揣著相機(jī)與錄音,去河邊找鬼苇瓣。 笑死尉间,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的击罪。 我是一名探鬼主播哲嘲,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼媳禁!你這毒婦竟也來了眠副?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤竣稽,失蹤者是張志新(化名)和其女友劉穎囱怕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫别,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娃弓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拧烦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钝计,死狀恐怖恋博,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情私恬,我是刑警寧澤债沮,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站本鸣,受9級(jí)特大地震影響疫衩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荣德,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一闷煤、第九天 我趴在偏房一處隱蔽的房頂上張望童芹。 院中可真熱鬧,春花似錦鲤拿、人聲如沸假褪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽生音。三九已至,卻和暖如春窒升,著一層夾襖步出監(jiān)牢的瞬間缀遍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工饱须, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留域醇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓冤寿,卻偏偏與公主長得像歹苦,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子督怜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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