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

PythonでチェックボックスのデータをCGIプログラムに渡す方法

チェックボックスは、複数の選択肢の中から同時に複数の項目を選択できるようにしたい場合に使用するUI要素です。ラジオボタンが「単一選択」であるのに対し、チェックボックスはオン・オフを個別に切り替えられる点が特徴です。

HTMLフォームの例

以下は、2つのチェックボックスを含むフォームのHTMLコード例です。

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

表示結果

上記のコードを実行すると、ブラウザには次のようなフォームが表示されます。

PythonでチェックボックスのデータをCGIプログラムに渡す方法

ユーザーがチェックボックスを選択して送信ボタンを押すと、フォームの内容が /cgi-bin/checkbox.cgi に対してPOSTメソッドで送信されます。

CGIスクリプト(checkbox.cgi)の処理

以下は、Webブラウザから送信されたチェックボックスの入力データを受け取り、処理する checkbox.cgi スクリプトの例です。

#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
if form.getvalue('maths'):
    math_flag = "ON"
else:
    math_flag = "OFF"
if form.getvalue('physics'):
    physics_flag = "ON"
else:
    physics_flag = "OFF"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

スクリプトのポイント解説

  • cgi.FieldStorage() を使って、送信されたフォームデータにアクセスできます。
  • form.getvalue('maths') のように項目名を指定すると、そのチェックボックスの値を取得できます。チェックされていない場合は None が返るため、if文でON/OFFを判定しています。
  • 最初の print "Content-type:text/html\r\n\r\n" はHTTPヘッダーであり、これを出力しないとサーバーエラーになります。ヘッダーと本文の間には必ず空行が必要です。
  • cgitb モジュールをインポートしておくと、スクリプト実行中にエラーが発生した際、詳細なトレースバックをブラウザ上で確認でき、デバッグに役立ちます。

注意:Python 3での書き方

上記のコードはPython 2系の記法(print文)で書かれています。Python 3では print() は関数になったため、print("<html>") のように括弧を付けて記述する必要があります。また、現在のPython標準ライブラリでは cgi モジュールは非推奨となっており、実運用ではFlaskやDjangoなどのWebフレームワークの利用が推奨されます。

  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による巡回冗長検査(CRC)の実装方法とサンプルコード

    巡回冗長検査(CRC)とは 巡回冗長検査(CRC:Cyclic Redundancy Check)は、デジタルデータ内の誤りを検出するために広く利用されている手法で、伝送エラーの検出に特に有効な技術として知られています。この手法の計算の中核を担っているのは「2進数の除算(バイナリ除算)」です。 CRCでは、一連の冗長ビットからなる「CRCビット(検査用ビット)」を使用します。これらのビットはデータ単位(データワード)の末尾に付加され、付加後のデータ単位全体が、あらかじめ決められた特定の2進数(除数)でちょうど割り切れるように構成されます。 受信側での誤り判定の流れ 受信側では、受信したデータ