python-cgi チェックボックスの状態を知る コード全文

Python活用

呼び出し側のページのチェックボックスの状態を判断するコード例を紹介します。
このコードは実際にサーバーに設置しているものです。
こちらのページでさくらのレンタルサーバーでの動作を実際に見ることができます。
文法的な解説はこちらのページで行っています。

呼び出し側HTML

<html>
  <head>
    <meta charset=utf-8>
    <title>Sample</title>
  </head>
  <body>
    <form action=/it/python/txt/cast.cgi method=post>
     <p><textarea id="copyTarget" cols="44" name="text" rows="10" wrap="off">Hello World
Hello World
Hello World</textarea></p>
     <p><input id="hello" name="hello" checked="checked" type="checkbox" value="hello" /><label for="hello"こんにちは</label></p>
     <p><input id="world" name="world" type="checkbox" value="world" /><label for="world">世界</label></p>
     <p><button name="button" value="kon">送信</button></p>
    </form>
  </body>
</html>

cgiのコード

#!/usr/local/bin/python
#coding: utf-8
import cgi,sys,io

form = cgi.FieldStorage()
text = form.getvalue('text', '')      #複数行テキストボックス(textarea)の値
button = form.getvalue('button', '')  #ボタンの値
hello = form.getfirst('hello', '')    #チェックボックスの状態をboolean型で取得
world = form.getfirst('world', '')    #チェックされていれば真

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

aisatsu = "Hello"
if hello:
    aisatsu = "こんにちは"

if world:
    sekai ="世界"
else:
    sekai ="World"

print('Content-Type: text/html; charset=UTF-8\n')

print("実行結果<BR>")

stringlist = text.split("\n")  #複数行テキストボックスの内容を行ごとに配列化(改行記号で区分けする)

print("stringlist = ")
print(stringlist)
print("<BR>")

index=[]                                #配列の宣言
i = 0
for line in stringlist:                 #stringlistの要素数だけforループ  lineには都度stringlistの各要素の文字列が入る
    if line[0:5]=="Hello" and i > 0:    #最初の5文字で判定 
        line=line.replace("Hello",aisatsu)    #.replace で置換された文字列を与える 代入文にしないとlineの値は変化しないので注意
    index.append(line)                        #.append で配列要素を追加する
    i = i + 1                                 #i の加算は自分で行う
 
print("index = ")
print(index)
print("<BR>")

array=[] 
for i in range(len(index)):                #indexの要素数だけforループ  i は自動で加算される range(len()) で0から最後までという意味
    str = index[i]
    if "World" in str and i > 0:           #その文字が含まれているかを in で判定する
        str = str.replace("World",sekai)              #6文字目までを削除
    if i != 2:                             # != は not == にしても同じ
        array.append(str)

print("array = ")
print(array)
print("<BR>")

#ここより上のprint()は、本番ではコメントアウトする(頭に#を付ける)
#要所要所にprint()を入れておくとエラーの発生カ所を特定しやすい


#出力するHTML

html_body1 = """
<!DOCTYPE html>
<html><meta charset="UTF-8" >
<head>
<title>python cgi sample</title>
</head><body><P><H3>実行結果</H3></P><p><textarea id="copyTarget" wrap="off"  rows="10" cols="22">"""


html_body2 = """
    </textarea></p>
    <!-- コピー対象要素とコピーボタン -->
    <button onclick="copyToClipboard()">コピー</button>
    <script>
        function copyToClipboard() {
            // コピー対象をJavaScript上で変数として定義する
            var copyTarget = document.getElementById("copyTarget");

            // コピー対象のテキストを選択する
            copyTarget.select();

            // 選択しているテキストをクリップボードにコピーする
            document.execCommand("コピー");

        }
    </script>

</body>
</html>
"""

print(html_body1)

for line in array:
    print(line) 

print(html_body2)
タイトルとURLをコピーしました