Python 建立簡單的 Tornado Web

本篇介紹用 Python 與 Tornado 來建立一個簡單的 Tornado Web,Tornado 相較於 Python 其他的主流 Web 框架的優勢就是速度快,Tornado 在效能上有的明顯地優勢,最先為 FriendFeed 公司的產品中使用,後來被 Facebook 收購後開源。

官方文件:http://www.tornadoweb.org/en/stable/
Github:https://github.com/tornadoweb/tornado
PyPI:https://pypi.org/project/tornado/

安裝 tornado

介紹如何在 Python 環境中安裝 tornado 模組,
執行程式時遇到 ImportError: No module named ‘tornado’ 這個錯誤訊息的話,請安裝 python 的 tornado 模組,

輸入下列指令安裝 pyserial 模組,以下列出 python 2 與 python 3 的方法︰
Python 2 安裝方法

1
$ sudo -H pip install tornado

Python 3 安裝方法

1
$ sudo -H pip3 install tornado

範例. Tornado Web 的 hello world

以下範例展示一個 Tornado 最簡單的 hello world 程式,將這程式執行起來後,
開啟 http://127.0.0.1:8080,即可看到網頁顯示 hello world 字樣,表示成功的完成這個範例。

這個範例一開始使用 make_app 函式來建立一個 tornado 的 application,
在 make_app 裡使用 tornado.web.Application 函式指定程式將 / URL 請求對應到 MainHandler,
這個 MainHandler class 主要是透過繼承 tornado.web.RequestHandler 來處理各種 Request 請求,
例如:get() 用來處理 HTTP GET 請求、post() 用來處理 HTTP POST 請求等等,
通常[ (r'/', MainHandler), ]這裡還可以指定更多種 URL 請求,但我們這邊只簡單介紹一個 URL 請求,

接著會使用 app.listen 來聆聽 port 8080 的 HTTP 請求,
所以只要有 http://127.0.0.1:8080/ 的 URL 請求,MainHandler 的 get 就會被呼叫來處理,
這邊的 get 裡我們簡單的回傳 Hello, world 字串,這個字串就是最終使用者會在瀏覽器上看到的字串,
接著使用 tornado.ioloop.IOLoop 開始進行主迴圈作事件等待,這樣一個簡單的 web 範例就完成了。

python-tornado-helloworld.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('Hello, world')

def make_app():
return tornado.web.Application([
(r'/', MainHandler),
])

if __name__ == '__main__':
app = make_app()
app.listen(8080)
tornado.ioloop.IOLoop.current().start()

開啟瀏覽器的網頁瀏覽結果如下圖:

QA. 為什麼使用 Tornado?跟 Django 相比呢?

根據這篇網友的回答:
Django 常用於大型專案快速開發,且有SQL資料庫需求的專案。
Tornado 適用各種情形,例如:個人專案、WebSocket 相關、NoSQL backend 相關。

參考
Structure of a Tornado web application — Tornado documentation
https://www.tornadoweb.org/en/stable/guide/structure.html
Tornado web應用的結構 — Tornado 文檔
https://tornado-zh.readthedocs.io/zh/latest/guide/structure.html
分析 Hello - 《从零开始学 Python》(第二版) - 极客学院Wiki
https://wiki.jikexueyuan.com/project/start-learning-python/302.html
第二章:表单和模板 - Introduction to Tornado 中文翻译
https://mirrors.segmentfault.com/itt2zh/ch2.html

其它相關文章推薦
Python 快速建立簡單網頁伺服器 http websever
[Python小專案] Tornado+PyAutoGUI 多媒體控制播放的網頁
Python 讀檔,讀取 txt 文字檔
Python 字串分割 split
Python 取代字元或取代字串 replace
Python 建立多執行緒 thread
Python OpenCV resize 圖片縮放
Python OpenCV 顯示camera攝影機串流影像