Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python CGIスクリプトの実行結果をブラウザに送信・表示する方法

Python CGIスクリプトの結果をブラウザに送信する方法

PythonでCGI(Common Gateway Interface)スクリプトを作成すると、処理結果は標準出力(stdout)を通じてWebサーバーに渡され、その後ブラウザへ送信されます。結果を正しく表示させるためには、HTTPヘッダーとHTML本文を適切な順序で出力することが重要です。

基本的な流れ

  1. Content-Typeヘッダーを出力する — 送信するデータがHTMLであることをブラウザに伝えます。
  2. 空行を挿入する — ヘッダーと本文の区切りとして、必ず1行の空行が必要です。
  3. HTML本文を出力する — 実際にブラウザへ表示される内容を記述します。

サンプルコード:フォームデータを受け取って表示する

以下は、HTMLフォームから送信された「名前」を取得し、挨拶メッセージとしてブラウザに表示するCGIスクリプトの例です。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi

# フォームデータを解析
form = cgi.FieldStorage()

# HTMLページのフィールドからデータを取得
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

# ブラウザへデータを送信
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("<title>Hello - Second CGI Program</title>")
print("</head>")
print("<body>")
print("<h2>Hello %s %s</h2>" % (first_name, last_name))
print("</body>")
print("</html>")

※ コード内の &lt;&gt; は、実際には通常のタグ記号(<・>)を使用してください。

ポイント解説

  • print("Content-type:text/html\r\n\r\n") のように、ヘッダーの直後に \r\n\r\n を付けることで、ヘッダーと本文を区切る空行をまとめて出力できます。
  • cgi.FieldStorage() は、GET・POSTどちらのリクエストでもフォームデータを取得できる便利なクラスです。
  • %s プレースホルダーを使うことで、取得した名前を文字列の中に埋め込んでいます。
  • ヘッダー後の空行がないと「500 Internal Server Error」が発生するため、必ず入れるようにしましょう。

補足:現代のPython開発において

CGIは仕組みがシンプルで学習しやすい反面、リクエストごとにプロセスが起動するためパフォーマンス面で不利です。現在の実務ではFlaskDjangoなどのフレームワークを使うのが主流ですが、CGIの動作原理を理解しておくことは、Webアプリケーションの基礎を身につけるうえで非常に役立ちます。

  1. Pythonで文字「G」のパターンを出力するプログラム

    コンソールにアスタリスク(*)を使って文字「G」のパターンを表示したい場合、専用の関数を定義し、二重ループ(ネストされたループ)で行と列を走査しながら、条件に合致する位置だけ「*」を出力する方法が有効です。以下に実際の実装例を示します。サンプルコードdef display_pattern(my_line): my_pattern = for i in range(my_line): for j in range(my_line): if ((j == 1 and i != 0 and i != my_line - 1)

  2. Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例

    Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実