Pythonでウェブサーバの構築
Pythonのインストール
本講義ではデータベースと連携したウェブサイトを構築します. 本来は,Apacheなどのソフトウェアを利用してウェブサーバを構築する必要がありますが, ここではPythonのhttp.serverモジュールを利用してローカル環境の簡易ウェブサーバとします.
それでは,Pythonのインストール・パッケージをダウンロードしてください. このとき,Pythonのバージョンは3.xを選択してください. インストールを始める前に,ファイルをインストールするためのフォルダを作成します. 大学で環境を構築する場合は,Hドライブ に,MyPythonという名前でフォルダを作成してください (人工知能など他の授業で既にインストール済みの場合は作業は不要).
それでは,インストーラを実行しましょう. Customize installationを選択し, パッケージ管理システムの pip が同時にインストールされることを確認してください.
このとき,インストールするフォルダは,上記で作成したH:\MyPythonとすることに注意してください.
インストールが終了すると,下記のダイアログが表示されます. Closeを選択して,ダイアログを閉じてください.
最後に,インストールしたPythonへのパスを 環境変数 に追加します. 任意のフォルダで,パワーシェルを起動して,下記コマンドが実行できれば準備OKです.
% python -V
Python 3.7.4
ウェブサーバの構築
Pythonを利用してウェブサーバを構築します. 作業用の空のフォルダ sugiten を作成し, パワーシェルを起動して,下記のコマンドを実行してください.
% python -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
これで,ローカル環境でウェブサーバが起動しています. ブラウザでhttp://0.0.0.0:8080/にアクセスしてみましょう. 下記の画面が表示されていればOKです.
次に,新規にindex.html を作成し,sugitenフォルダに配置します. index.htmlには下記のコードを記述します. タイトルやヘッダに 椙天市場 という文字列を設定しています.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>椙天市場</title>
</head>
<body>
<h1>椙天市場</h1>
</body>
</html>
ブラウザでhttp://0.0.0.0:8080/にアクセスすると, 下記の画面が表示されます.
CGIの設定
データベースを操作するには,CGI(Common Gate Interface) を有効にする必要があります. CGIとは,ウェブサーバが外部プログラム(ここでPython)を呼び出す仕組みのことです. 新規に server.py を作成し,sugitenフォルダに配置します. server.pyには下記のコードを記述します. ここではポート番号やIPアドレスを指定しています. また,sugitenフォルダに,新規に cgi-bin フォルダ作成します. このフォルダにCGIのプログラムを配置します.
from http.server import HTTPServer, CGIHTTPRequestHandler
class Handler(CGIHTTPRequestHandler):
# CGIを設置するディレクトリ
cgi_directories = ["/cgi-bin"]
# ポート番号
PORT = 8080
# IPアドレス
HOST = "127.0.0.1"
# URLを表示
print("http://127.0.0.1:8080/")
# サーバの起動
httpd = HTTPServer((HOST, PORT), Handler)
httpd.serve_forever()
先程と同様にパワーシェルで下記のコマンドを実行してください. ブラウザにindex.htmlが表示されます.
% python server.py
http://127.0.0.1:8080/
次にPythonでCGIのプログラムを作成します. 新規に users.py を作成し,cgi-binフォルダに配置します. users.pyには下記のコードを記述します(ユーザの一覧情報を表示させるために用いる).
#!/usr/bin/env python
print ("Content-type:text/html\n\n")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("<meta charset='utf-8'>")
print("<title>ユーザ情報</title>")
print("</head>")
print("<body>")
print("<h1>ユーザ情報</h1>");
print("</body>")
print("</html>")
このファイルに実行権限を付与します.
macOSの場合は下記のように chmod
コマンドを用いて権限を変更します.
% chmod 755 users.py
また,index.htmlのbodyタグに,user.pyへのリンク文字列を追加します.
<body>
<h1>椙天市場</h1>
<ul>
<li><a href="cgi-bin/users.py">ユーザ情報</a></li>
</ul>
</body>
ユーザ情報へのリンクをクリックして,下記のページが表示されれば, CGIが問題なく動作していることになります.
日本語が文字化けするとき
PythonのCGIプログラムが文字化けするときは,下記のコードを先頭に追加してください.
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')