SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonで学ぶバックエンド開発

【Pythonから出力した情報を表示する方法】サーバサイドで出力したHTML5ファイルをWebページで表示しよう!

Pythonで学ぶバックエンド開発 第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

 本連載では、ベジェ曲線でお絵描きするWebアプリを使って、描いた絵を公開できる掲示板を開発しながら、Pythonを使ったバックエンド開発について学んでいきます。連載第3回は、Pythonから出力したWebページを表示する方法を解説をします。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 第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ファイルにパーミッションで実行権限を与えます。

[1] サンプルコード「.htaccess」
AddHandler cgi-script .py
DirectoryIndex index.py
[2] サンプルコード「html.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」するのを忘れないように。

サンプルコード「html.py」を開いたところ
サンプルコード「html.py」を開いたところ

 Webブラウザでは見られませんが、Content-Type: text/html; charset=utf-8\n\nという文がこれ以降の文書がHTML文であることを明示します。他にも「Content-Type」次第でこの文書が「JSON」ファイルであるとか「CSV」ファイルであるとか明示できます。

コラム「面白いWebコンテンツ」

 Webサイトは見るだけでも面白いコンテンツもありますが、やっぱりSNSに代表されるような参加型のWebコンテンツが面白いのではないでしょうか?他にもやっぱりゲームとか面白いのではないでしょうか(ただし筆者はゲームをプレイするモチベーションがほとんどなくなってしまい、自分で作ったゲームか、麻雀でさえあまり遊ばなくなってしまいましたが)。筆者はゲームはプレイするより作る側ですが、ゲームの入門記事を書くのはあまりにホビー寄り過ぎるので編集部からNGが出されました(汗)。そこでこの連載ではSNSの元祖である掲示板のシステムをPythonでプログラミングする入門記事を書くことになりました。

次のページ
HTML5のスクリプトを出力する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Pythonで学ぶバックエンド開発連載記事一覧

もっと読む

この記事の著者

大西 武(オオニシ タケシ)

 1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21526 2025/07/04 18:21

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング