この記事ではPythonのWebフレームワークであるTornadoのインストールとHelloWorldを見ていきます。
Tornadoの特徴
- Facebook社が買収してオープンソースになった。
- ノンブロッキングなイベント駆動フレームワーク。
- C10K問題を解決できるだけのパフォーマンスがある。
- ユーザ認証、セキュリティ、ソーシャルネットワーク、データベース、WebAPIなども扱える。
Tornadoのインストール
pip install tornado
コマンドでインストールできます。
PS C:\Users\testuser\OneDrive\IT\Python> pip install tornado
Collecting tornado
Downloading tornado-6.1.tar.gz (497 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 497.4/497.4 KB 6.2 MB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for tornado, since package 'wheel' is not installed.
Installing collected packages: tornado
Running setup.py install for tornado ... done
Successfully installed tornado-6.1
PS C:\Users\testuser\OneDrive\IT\Python>
Hello Worldの実行
任意のディレクトリに任意の名前(server.py
)で以下のコードを記述して実行するだけでブラウザでHello Worldが確認できます。
以下のコードではポート番号を8888
と指定しているのでブラウザのURL欄にはhttp://localhost:8888/
を入力してアクセスします。
サーバを止めるには、VScodeのコンソール上でctrl+c
を入力します。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
コード解説
以下のコードは、tornado.web.RequestHandler
を継承したMainHandler
というクラスを作成しています。
これがTornadoのリクエストハンドラクラスになります。
def get(self):
はHTTPリクエストのGETを表しています。
POSTリクエストを行いたい場合はdef post(self):
とします。
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
以下のコードはhttp://localhost/
にアクセスしてきたときにMainHandler
を呼び出すという意味になります。
TornadoではHTTPリクエストのパスをマッチさせるために正規表現を使えます。
application = tornado.web.Application([
(r"/", MainHandler),
])
以下のコードがTornadoアプリケーションを起動している処理です。
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
クエリパラメータを取得する
クエリ文字を受け取るには以下のように記述します。
self.get_argument('fruits', 'いちご')
の第一引数がクエリパラメータです。第二引数は、パラメータが指定されなかった場合のデフォルト値です。
class MainHandler(tornado.web.RequestHandler):
def get(self):
result = self.get_argument('fruits', 'いちご')
self.write(result)
ブラウザでhttp://localhost:8888/?fruits=banana
にアクセスすれば「banana」と表示されます。
ブラウザでhttp://localhost:8888/
にアクセスすれば「いちご」と表示されます。
複数のクエリパラメータを受け取る
複数のクエリ文字を受け取る場合には、以下のように記述します。
ブラウザでhttp://localhost:8888/?fruits=strawberry&yasai=tamanegi
にアクセスすれば「strawberry tamanegi」と表示されます。
class MainHandler(tornado.web.RequestHandler):
def get(self):
val1 = self.get_argument('fruits', 'いちご')
val2 = self.get_argument('yasai', 'たまねぎ')
self.write(val1 + ' ' + val2)
静的ページを表示する。
任意のHTMLページを返すには、ハンドラクラスで以下のように記述します。
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
HTTPステータスコードを返却するには
self.set_status(200)