ドロップダウンボックスのデータをPythonのCGIプログラムへ渡す方法
ドロップダウンボックスは、多くの選択肢の中から1つだけを選択させたい場合に使用するフォーム部品です。アンケートや設定画面など、限られた項目の中からユーザーに選ばせたい場面でよく利用されます。
HTMLフォームの例
以下は、ドロップダウンボックスを1つ持つフォームのHTMLコード例です。
<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank"> <select name = "dropdown"> <option value = "Maths" selected>Maths</option> <option value = "Physics">Physics</option> </select> <input type = "submit" value = "Submit"/> </form>
表示結果
このコードをブラウザで開くと、次のようなフォームが表示されます。

CGIスクリプト(dropdown.py)
続いて、Webブラウザから送信されたデータを受け取って処理するdropdown.pyスクリプトです。cgiモジュールのFieldStorageを使い、フォームから送信された「dropdown」の値を取得しています。
#!/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('dropdown'):
subject = form.getvalue('dropdown')
else:
subject = "Not entered"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"
コードのポイント
- form.getvalue('dropdown'):送信されたドロップダウンの値を取得します。何も選択されずに送信された場合はNoneが返るため、if文でチェックし、未入力の場合は「Not entered」という文字列を代入しています。
- Content-typeヘッダー:CGIプログラムでは、HTML本文を出力する前に必ず「Content-type:text/html」というHTTPヘッダーと空行を出力する必要があります。これを忘れるとサーバーエラーになります。
なお、上記のコードはPython 2の構文(print文)で書かれています。Python 3環境で実行する場合は、print()関数形式に書き換える必要がある点に注意してください。
-
Pythonでテキストエリア(TEXTAREA)のデータをCGIプログラムに渡す方法
複数行のテキストデータをCGIプログラムに送信したい場合には、HTMLのTEXTAREA要素を使用します。TEXTAREAは、ユーザーが自由に複数行の文章を入力できる入力欄を提供し、その内容は通常のテキストフィールドと同じようにCGIプログラムへ渡されます。 TEXTAREAを使ったフォームのHTMLコード例 以下は、TEXTAREAボックスを含むフォームのHTMLコード例です。 <form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
-
Pythonによる巡回冗長検査(CRC)の実装方法とサンプルコード
巡回冗長検査(CRC)とは 巡回冗長検査(CRC:Cyclic Redundancy Check)は、デジタルデータ内の誤りを検出するために広く利用されている手法で、伝送エラーの検出に特に有効な技術として知られています。この手法の計算の中核を担っているのは「2進数の除算(バイナリ除算)」です。 CRCでは、一連の冗長ビットからなる「CRCビット(検査用ビット)」を使用します。これらのビットはデータ単位(データワード)の末尾に付加され、付加後のデータ単位全体が、あらかじめ決められた特定の2進数(除数)でちょうど割り切れるように構成されます。 受信側での誤り判定の流れ 受信側では、受信したデータ