【Pythonから出力した情報を表示する方法】サーバサイドで出力したHTML5ファイルをWebページで表示しよう!
Pythonで学ぶバックエンド開発 第3回
ダウンロード 第3回 サンプルコード (4.6 KB)
本連載では、ベジェ曲線でお絵描きするWebアプリを使って、描いた絵を公開できる掲示板を開発しながら、Pythonを使ったバックエンド開発について学んでいきます。連載第3回は、Pythonから出力したWebページを表示する方法を解説をします。
はじめに
第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でプログラミングする入門記事を書くことになりました。
この記事は参考になりましたか?
- この記事の著者
-
大西 武(オオニシ タケシ)
1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営する開発者のための情報メディアです。日々の開発に取り組むエンジニアやテクノロジーを学びたい方に向けて、プログラミングやAI活用、開発ツール、エンジニアの学びとキャリアに関する記事をお届けしています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
