Pythonのsocket通信を行ったので、今度はローカル環境にwebサーバーを立ち上げてみようと思います。
pythonでwebアプリケーションなどを作成した時に、ローカルでのテスト用のwebサーバーとして使う方法になります。
サーバーを起動してhtmlファイルを表示するまでやってみようと思います。
index.htmlファイルを用意する
サーバーを起動してアクセスしたら表示されるhtmlファイルを作っておきます。
次の簡単なコードをここでは用意しました。
<!DOCTYPE html>
<html>
<head>
<title>サーバーテスト</title>
<meta charset="UTF-8">
</head>
<body>
<h1>サーバーの起動中</h1>
<p>Hello, Python!</p>
</body>
</html>
これをindex.htmlとして、作業ディレクトリに保存しておきます。
これはwebページを表示する為に用意するもので、別に用意しなくても問題ありません。用意しないならば、作業ディレクトリ内のファイルにアクセスすることになります。
Pythonコマンドでwebサーバの起動
Pythonに付属している標準ライブラリにシンプルなWebサーバとして機能するモジュールがあります。
まずはhttp.serverというモジュールを使って簡単なWebサーバを起動してみます。
ターミナルから次のコマンドを実行するだけです。
$ python -m http.server 8000
実行すると、次のように表示されます。
Webサーバが起動して、サーバの稼働状態かのメッセージが表示されています。
ここで、ブラウザから「http://127.0.0.1:8000/」にアクセスしてみます。
最初に作ったindex.htmlファイルが表示されました。このHTMLファイルを用意しなかった場合はディレクトリ内にあるファイル名が表示されます。
[control]+[C]でサーバを閉じることができます。
Pythonスクリプトでサーバの起動 – socketserver
今度はpythonスクリプトでwebサーバを起動してみます。socketserverモジュールを使います。
これをインポートしてスクリプトを書いていきましょう。
import http.server
import socketserver
with socketserver.TCPServer(('127.0.0.1', 8000), http.server.SimpleHTTPRequestHandler) as httpd:
httpd.serve_forever()
http.serverとsocketserverをインポートします。
withステートメントを使って、socketserver.TCPServer()を開いて、ローカルアドレスとポートを指定し、webリクエストを処理するハンドラーとしてhttp.server.SimpleHTTPRequestHandlerを渡します。これをhttpdとして、serve_forever()で起動します。
これを作業ディレクトリにPythonファイルで保存し、ターミナルから実行します。
エラーなど出ていなければ、サーバが起動しています。
Chromeブラウザを立ち上げて、「127.0.0.1:8000」にアクセスしてみます。
先ほどと同じように、用意していたindex.htmlが表示されました。
webbrowserでブラウザを起動
現在webサーバが立ち上がっている状況ですが、これまではブラウザを自分で立ち上げてURLを入力してweb表示をしていました。
これを、Pythonの対話型シェルを使ってブラウザを起動してwebを表示してみたいと思います。それにはwebbrowserモジュールを使います。
ターミナルからpythonを起動して、次のように入力します。
import webbrowser
webbrowser.open('http://127.0.0.1:8000')
webbrowserをインポートしてopen()を使ってIPアドレスに接続しています。
これを実行すると、これまでと同じようにwebページが表示されます。私はChromeをデフォルトのブラウザに指定しているので、Chromeで表示されます。(上と同じ)
Firefoxのブラウザを起動したい場合は、次のように対話型シェルに入力していきます。
import webbrowser
f = webbrowser.get('firefox')
f.open('http://127.0.0.1:8000')
こちらはwebbrowserのget()を使ってFirefoxを指定し、open()で同様にサーバにアクセスします。
これまでの対話型シェルのコードは次のように実行します。
サーバへの接続が成功するとTrueと返されブラウザが起動します。
Firefoxでも同様にwebが表示されました。
これでサーバの立ち上げとブラウザでのアクセスが成功しました。
[control]+[C]でサーバを閉じましょう。
最後に
Python付属の標準ライブラリにはシンプルなWebサーバとして機能するモジュールがあります。ローカルwebサーバーは自分の構築したwebアプリなどをテストするのに使います。
ここでは、http.serverというモジュールを使ってPythonコマンドからWebサーバを起動する方法と、socketserverモジュールを使ってPythonスクリプトからwebサーバを立ち上げる方法を見てきました。
サーバーにアクセスするとディレクトリ内にあるファイルを見ることができます。index.htmlファイルがあると、その内容をブラウザ上に表示します。
WebブラウザをPythonの対話型シェルからwebbrowserモジュールを使って立ち上げる方法も合わせて学びました。