Tornado-02、編寫第一個tornado程序

1.Tornado簡介

tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠強健,但卻在創建和編寫時有着足夠的輕量級,並能夠被用在大量的應用和工具中。

tornado的安裝也很簡單,直接使用pip安裝即可:pip install tornado

2.Tornado路由映射

我們已經知道了Tornado是什麼了,現在讓我們看看它能做什麼吧。我們首先從使用Tornado編寫一個簡單的Web應用開始。

Tornado是一個編寫對HTTP請求響應的框架。作爲程序員,你的工作是編寫響應特定條件HTTP請求的響應的handler。下面是一個全功能的Tornado應用的基礎示例:
新建一個python file 命名爲start1 往文件里加入一下代碼

start1.py




import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("hello ")

application = tornado.web.Application([
    (r"/",MainHandler),
])

if __name__ == "__main__":
    application.listen(8000) #在這裏需要設置端口轉發,把主機的8000端口轉發到虛擬機的8000端口
    tornado.ioloop.IOLoop.instance().start()


點擊tool--> start SSH session
在pycharm 下方的terminal中輸入以下命令執行這個py文件


workon py3env
cd tornado_1
ls
python start1.py

圖片描述


然後在瀏覽器地址欄中鍵入相應的ip地址與路由
*注意地址欄內填入ip地址(就是ubuntu裏面ifconfig顯示的那個地址)再在後面加上':'再加上端口號
如:你的ip爲 192.43.22.132 端口爲9000
那麼地址欄就該這麼填 192.43.22.132:9000*


圖片描述


這是一個簡單,基礎的示例,接下來看一個更加複雜一點的示例。

start2.py


import tornado.httpserver  #幫助啓動tornado服務器
import tornado.ioloop      #開啓tornado循環,後臺等待
import tornado.options       #命令行中讀取設置
import tornado.web         #RequestHandler 和 Application 在這個模塊裏面

from tornado.options import define, options   #define用來定義默認端口號

# 定義一個默認端口
define("port", default=9000, help="run on the given port", type=int)


# 定義一個事件處理的類
class IndexHandler(tornado.web.RequestHandler):
    def get(self):  # 這是get方法
        self.write('abc')  # 往頁面中寫入字符串abc  


if __name__ == "__main__":
    tornado.options.parse_command_line()

    app = tornado.web.Application(  
        handlers=[  
        (r"/", IndexHandler),  # 路由映射 當訪問路由/的時候 調用IndexHandler類來處理
        ]
    )
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)  # 監聽這個端口
    tornado.ioloop.IOLoop.instance().start()  # 啓動這個服務

關掉上執行中的start1.py (Ctrl + C
將這個新建的文件更新到ubuntu中
再執行start2.py文件
然後在瀏覽器地址欄中輸入ip:9000 (我們剛纔換了一下port的值)
顯示如下


![clipboard.png](/img/bV6cJc)


在端口後面加上不同的路徑,可以通過路由映射來做不同的事情。

在start2.py中添加以下代碼


#添加路由映射
(r"/aaa", AaaHandler),

#寫對應的類
class AaaHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('aaa')
    
#有了不同的映射之後就可以實現各種需求


圖片描述

在上面的代碼中,self.write()就是輸出,可以把內容輸出到瀏覽器。
注意 write輸出的內容 是python對象序列化的對象 即json對象

3.Tornado的項目結構的輸入與輸出

在上面的代碼中,self.write()就是輸出,可以把內容輸出到瀏覽器。

但是如果想得到輸入,可以使用查詢字符串。
在start2.py中加入一下代碼

#添加路由映射
(r"/gre", GreHandler),

#添加處理類
class GreHandler(tornado.web.RequestHandler):
    def get(self):
        gre = self.get_argument('aaa','hello') #得到網頁上aaa的值 默認爲hello
        self.write(gre + ',frindely user!')

這裏的get_argument可以得到瀏覽器地址欄中的參數輸入。

默認的情況


圖片描述

有參數的情況

參數改爲123
參數輸入的格式爲路由後+?+變量賦值


圖片描述

使用get_arguments來獲取查詢字符串列表。

注意:write不能序列化一個列表,但是字典是可以的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章