はじめに
第2回でも少し触れたように、Pythonのコード自体はクライアントのWebブラウザには送られません。サーバサイドでPythonから出力したHTML5文書がクライアントのWebブラウザに送られます。
単純に「print」関数で出力した文字列がクライアントのWebブラウザに送られます。またその文字列であるHTML5文書次第で.cssファイルやJavaScriptの.jsファイルも送られます。
次のサンプルコードが書けたら、HTML5+CSS+JavaScriptがわかっていればたいていのWebアプリ制作ができるようになります。あとはデータベースとのやり取りの部分がPythonを使ってできればいいだけです。データベースについては次回、データベースとのやり取りについてはその次の回以降に解説します。
HTML文書をWebブラウザに出力する
まず「.htaccess」ファイルを用意して「AddHandler cgi-script .py」で「.py」ファイルをCGIスクリプトとして実行することをハンドラーに追加する必要があります。また「DirectoryIndex index.py」でデフォルトのファイルを「index.py」ファイルに指定します。
次のサンプルコード「html.py」ファイル[1]と「.htaccess」ファイル[2]を「xampp」→「htdocs」→「BezierBBS」フォルダ内に配置します。macOSやLinuxではhtml.pyファイルにパーミッションで実行権限を与えます。
AddHandler cgi-script .py DirectoryIndex index.py
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe import sys import io #日本語があってもエラーにならないように sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') print('Content-Type: text/html; charset=utf-8\n\n') print('HTMLコンテンツを表示。')
サンプルコードの解説
Windowsでは「#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe」でPythonのプログラムのパスを指定します。これはLinuxやmacOSなどでは「#!/usr/local/bin/python3.12」などになります。またレンタルサーバによって異なるので、そのレンタルサーバのヘルプを見てください。
「sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')」で文字コードをUTF-8にセットします。
Content-Type: text/html; charset=utf-8\n\n
はこの文書がテキスト形式のHTML文書であることを明示します。
「print('HTMLコンテンツを表示。')」でHTMLコンテンツを表示。
という文字列をWebブラウザに出力します。
「#!」はコメントアウトの「#」ではなく「shebang(シェバン)」というもので、シェルスクリプトを実行するためにあります。コンピュータ内でプログラムのパスを指定すれば実行時にそのプログラムが起動し、それ以降のスクリプトが引き渡されて実行されます。「ユーザー名」の部分はお使いのパソコンに合わせてください。
日本語など「UTF-8」の文字コードが使えるように「sys.stdout」に「io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')」を代入します。これを忘れると日本語が文字化けします。
「XAMPP」の「Apache」を「Start」して「http://localhost/BezierBBS/BezierBBS_samplecode_03/html.py」をWebブラウザで開くと次の図のように表示されます。Webブラウザを終了する時にはApacheを「Stop」するのを忘れないように。

Webブラウザでは見られませんが、Content-Type: text/html; charset=utf-8\n\n
という文がこれ以降の文書がHTML文であることを明示します。他にも「Content-Type」次第でこの文書が「JSON」ファイルであるとか「CSV」ファイルであるとか明示できます。
コラム「面白いWebコンテンツ」
Webサイトは見るだけでも面白いコンテンツもありますが、やっぱりSNSに代表されるような参加型のWebコンテンツが面白いのではないでしょうか?他にもやっぱりゲームとか面白いのではないでしょうか(ただし筆者はゲームをプレイするモチベーションがほとんどなくなってしまい、自分で作ったゲームか、麻雀でさえあまり遊ばなくなってしまいましたが)。筆者はゲームはプレイするより作る側ですが、ゲームの入門記事を書くのはあまりにホビー寄り過ぎるので編集部からNGが出されました(汗)。そこでこの連載ではSNSの元祖である掲示板のシステムをPythonでプログラミングする入門記事を書くことになりました。