フォームデータの取得
PythonでHTMLを表示できたので次はフォームからのデータ取得を試してみる
・入力画面
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <form action="action.py" method="post"> ■チェックボックス<br> <input type="checkbox" name="chkbox" value="aaa">aaa <input type="checkbox" name="chkbox" value="bbb">bbb <input type="checkbox" name="chkbox" value="ccc">ccc ■ラジオボタン<br> <input type="radio" name = "radio" value="radio1">radio1 <input type="radio" name = "radio" value="radio2">radio2 ■テキストボタン<br> <input type="text" name="text"><br> ■メモ<br> <input type="textarea" name="memo"><br> ■ボタン<br> <input type="submit" name="btn" value="button1">button1 <input type="submit" name="btn" value="button2">button2 <input type="submit" name="btn" value="button3">button3 </form> </body> </html>
・フォーム入力データ取得&表示プログラム
#!d:\Python25\python.exe #coding:utf-8 ''' ''' import cgi import cgitb; cgitb.enable() #エラー発生時にブラウザ上に表示させる、デバック時のみ利用がおすすめ print "Content-Type: text/html" print html = '''<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body>''' print html print "Hello World" print "日本語<br>" print "cgi.test()結果" fs = cgi.FieldStorage() #チェックボックス chkbox = fs.getlist("chkbox")#つねにリストにして返す、値がない場合は空のリスト、getfirstは最初の値だけ返すが順番は保障しない for item in chkbox: print "name:chkbox=", item,"<br>" #ラジオボタン radio = fs.getlist("radio") for item in radio: print "name:radio=", item,"<br>" #テキスト #text = fs["text"].value.decode("shift-jis")#同一名のフィールドの場合はインスタンスのリストになる text = fs.getvalue("text").decode("shift-jis") print "name:text=" , text.encode("utf-8"),"<br>" #メモ memo = fs.getvalue("memo").decode("shift-jis") print "name:memo=" , memo.encode("utf-8"),"<br>" #ボタン btn = fs.getlist('btn')#同名ボタンが存在しているパターン for item in btn: print "name:btn=", item,"<br>" print '<a href="index.html">index</a>' print "</body>" print "</html>"
【テストしてみて】
今回は入力フォームををShift-JISで作成したため日本語が入力されるテキストボックスはデコードして変数に格納、取得データの表示はUTF-8で出力してみた