PythonでWebアプリケーション(2)


今回は,Pythonを使ってWebアプリケーションを作るためにあたって,HTTPとPythonでWebサーバを作るについて話したいと思います.

実行環境

OS:MasOS High Sierra
MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)
プロセッサ:3.5 GHz Intel Core i7
メモリ:16 GB 2133 MHz LPDDR3

Python 3.6.4
Chromeバージョン: 71.0.3578.98(Official Build) (64 ビット)

HTTPについて

WebアプリケーションではUIや結果を表示する部分と,データを受け取って処理を行う部分が分かれています.この様なアプリケーションをクライアント・サーバ型アプリケーションと呼びます.

クライアントとは,特定の機能を専門に受け持つアプリケーションを指します.Webアプリの場合は,HTMLで書かれたUIなどを表示するWebブラウザがクライアントに相当します.

サーバには,処理を実行するプログラムを置きます.ユーザが実際に操作をするのはクライアントになります.クライアントとサーバの間では通信が行われることになります.
アプリケーションが動くときに通信をするかしないかが,スタンドアロン型のアプリケーションとWebアプリのようなクライアント・サーバ型アプリケーションの決定的な違いです.

サーバは,UIに入力された内容を通信で受け取ります.必要があれば,処理の結果を通信でクライアントに戻します.つまり,通信には2つの方向があるわけです.

リクエストとレスポンス

クライアントからサーバに向かう通信をリクエスト(要求)と呼びます.
逆に,サーバからクライアントへの通信をレスポンス(応答)と呼びます.
クライアントから処理を要求し,サーバが処理結果を応答として返します.

では,https://www.python.org/about/の様なURLの例を取って,URL文字列の意味について簡単に解説します.
httpはスキーム,www.python.orgはホスト,aboutはパスと呼ばれます.
URLは,大まかに分けて前半と後半に分かれます.
前半はスキーム,ホストと呼ばれる要素から構成します.スキームはどのような手法を使ってリクエストを送るかを指定する部分です.ホストはリクエストを送る先がインターネット上のどこにあるかを指定する部分です.
後半部分はパス,Pythonで作られているアプリケーションの一覧が書かれたHTMLを送るよう,パスを指定します.

PythonでWebサーバを作る

Webアプリケーションを実際に動かすには,クライアントとなるWebブラウザと,サーバとなるWebサーバが必要です.
Webブラウザは,皆さんが日常的に利用しているはずです.Webサーバは,読者の多くが使っていないと思いますので,別途用意する必要があります.
Pythonに含まれる標準ライブラリを使ってWebサーバを用意します.Webサーバを走らせるためには,普段使っているパソコンを使います.Pythonをインストールしたパソコンが1台あれば,Webアプリケーションを作ることができるわけです.

サーバを用意する?難しい!と想う人がいますかもしれないが,実際,http.serverというモジュールを使って簡単なWebサーバを起動することができます.方法はとても簡単で,たった1行のコマンドを実行するだけです.
python3 -m http.server 8000
Webサーバを起動した後は,Webサーバの稼働状態がメッセージとして表示されます.

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
localhost - - [25/Dec/2018 15:19:58] code 404, message File not found

Webブラウザを使って「http://127.0.0.1:8000/」というURLにアクセスします.状況によってWebブラウザに表示される内容は違います.

127.0.0.1というのはループバックアドレスと呼ばれるIPアドレスです.Webブラウザと同じマシンを指しています.コロン(:)の後ろはポート番号です.ブラウザでアクセスしているURLは,「Webブラウザと同じマシンのポート8000番で通信を受け付けているWebサーバにアクセスする」という意味を持っています.
Webサーバを止めるには,LinuxやMac OS XではCtrl+Cを押します.Windowsの場合は本来Ctrl+Zを押します.終了できない場合があるので,その時ウィンドウを閉じてください.

http.serverモジュールを使ったWebサーバでは,起動したときのカレントフォルダ(ディレクトリ)にあるファイルを見せるような動きをします.先ほどWebブラウザに表示されていたファイルのリストは,Webサーバを起動したフォルダ(ディレクトリ)にあったファイルだったわけです.このように,Webサーバがファイルを扱う起点となるフォルダのことをドキュメントルートと呼ぶことがあります.

ドキュメントルートに相当する場所にindex.htmlという名前のHTMLファイルを置くと,Webブラウザにはそのファイルが表示されます.

simpleserver.py
import http.server

server_address = ("", 8000)
handler_class = http.server.SimpleHTTPRequestHandler #ハンドラを設定
simple_server = http.server.HTTPServer(server_address, handler_class)
simple_server.serve_forever()
index.html
<html><body>
Python is awesome !
</body></html>

ファイルを設置したら,Webサーバを起動します.(コマンドは以下)
$ python3 simpleserver.py

すると,Webサーバが立ち上がります.
この状態で,Webブラウザを使ってhttp://127.0.0.1:8000/という,先ほどと同じURLにアクセスします.すると,index.htmlの内容が表示されるはずです.

今回の「PythonでWebアプリケーション(2)」は以上で終わります.
読んでいただいてありがとうございます.

次回予告:簡単なプログラムを動かしたいと思います.