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

Python CGIスクリプトでフォームデータを処理する基本手法を解説

PythonのCGI(Common Gateway Interface)を使うと、HTMLフォームから送信されたデータをサーバーサイドで受け取り、動的に処理することができます。本記事では、姓名の入力を受け付けるシンプルなフォームを例に、その基本的な実装方法を解説します。

1. HTMLフォームの作成

まず、以下のようなHTMLフォームを用意します。このフォームは、ユーザーが入力した姓名(FirstName・LastName)を、POSTメソッドで「getData.py」へ送信します。

<form action="getData.py" method="post">
   FirstName: <input type="text" name="first_name">
   LastName: <input type="text" name="last_name">
   <input type="submit" value="go">
</form>

action属性にはデータの送信先となるスクリプト名「getData.py」を指定し、method属性には「post」を設定しています。「go」ボタンをクリックすると、入力された内容がgetData.pyに渡されます。

2. Python CGIスクリプトの実装

次に、フォームから送信されたデータを受け取って画面に表示するPythonスクリプト「getData.py」を作成します。

#!C:\Python27\python.exe
# CGI処理用モジュールをインポート
import cgi, cgitb

# FieldStorageインスタンスを作成
form = cgi.FieldStorage()

# フォームから各フィールドのデータを取得
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')

print("Content-type:text/html")
print
print("")
print("")
print("Hello - Second CGI Program")
print("")
print("")
print("
   Hello %s %s
   " % (first_name, last_name))
print("")
print("")

3. コードのポイント解説

  • 1行目のシバン(shebang)
    サーバー上でこのスクリプトを実行するPythonインタープリタのパスを指定しています。環境に応じてパスを変更してください。
  • cgiモジュールとcgitbモジュール
    cgiモジュールはフォームデータの解析に使用します。cgitbモジュールを有効にしておくと、エラー発生時に詳細なトレースバックがブラウザに表示されるため、デバッグに役立ちます。
  • cgi.FieldStorage()
    POSTまたはGETで送信されたフォームデータを格納するオブジェクトです。このインスタンスを通じて各入力項目にアクセスできます。
  • getvalue()メソッド
    name属性(first_name、last_name)に対応する値を取得します。該当するデータがない場合はNoneが返されます。
  • Content-typeヘッダー
    CGIスクリプトは必ず最初にHTTPヘッダーを出力する必要があります。ここではHTMLを出力するため「text/html」を指定しています。ヘッダーの後には空行が必要な点にも注意しましょう。

4. 動作の流れ

  1. ユーザーがHTMLフォームに姓名を入力し、「go」ボタンをクリックします。
  2. 入力データがPOSTメソッドでgetData.pyに送信されます。
  3. getData.pyがFieldStorageを使ってデータを解析・取得します。
  4. 取得した姓名を組み込んだ「Hello 名前 苗字」という挨拶ページが生成され、ブラウザに表示されます。

補足:現代の開発環境について

なお、Pythonの標準ライブラリであるcgiモジュールは、Python 3.11で非推奨となり、Python 3.13では削除されました。現在のWeb開発では、FlaskやDjangoといったフレームワークを使用するのが一般的です。これらを使えば、フォーム処理をより安全かつ簡潔に実装できます。ただし、レガシーシステムの保守やCGIの仕組みの学習という観点では、本記事の内容は今でも有用な基礎知識となります。

  1. Pythonでテキストエリア(TEXTAREA)のデータをCGIプログラムに渡す方法

    複数行のテキストデータをCGIプログラムに送信したい場合には、HTMLのTEXTAREA要素を使用します。TEXTAREAは、ユーザーが自由に複数行の文章を入力できる入力欄を提供し、その内容は通常のテキストフィールドと同じようにCGIプログラムへ渡されます。 TEXTAREAを使ったフォームのHTMLコード例 以下は、TEXTAREAボックスを含むフォームのHTMLコード例です。 <form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">

  2. Python Tkinterで作る簡単な登録フォーム入門

    Tkinterは、GUI(グラフィカルユーザーインターフェース)を開発するためのPython標準ライブラリです。Tkinterを使うことで、ウィンドウをはじめとするさまざまなUI(ユーザーインターフェース)要素を持つデスクトップアプリケーションを作成できます。推奨されているPython 3.xを使用している場合、TkinterはPythonに標準搭載されているパッケージなので、追加のインストールは一切不要です。この記事では、まずTkinterの基本的なGUIアプリケーションの作り方を解説し、その後、実際の登録フォームやローン金利計算ツールといった実用的な例まで段階的に見ていきます。シンプルなG