Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果

Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果を紹介します。

概要

Flaskアプリケーションでチェックボックスの値を取得、設定するコードを紹介します。
テンプレートページからのPOSTにより値を受け取る動作となります。

チェックボックスの値の取得

書式

サーバー側で以下のコードでチェック状態を取得できます。

request.form.get('(チェックボックスのID)')

実装例

コード

以下のファイルを作成します。

app.py
from urllib import request
from flask import Flask, render_template, request
app = Flask(__name__)

# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app

@app.route('/')
def func1():
    return render_template("index.html")

@app.route('/',methods=['POST'])
def func2():
    value1 = request.form.get('checkbox1')
    value2 = request.form.get('checkbox2')
    if value1 is None: 
      value1 = "チェックなし"
    if value2 is None: 
      value2 = "チェックなし"
      
    result1 = "ChecktBox1:" + value1 
    result2 = "ChecktBox2:" + value2
    return render_template("index.html", output_message1=result1, output_message2=result2)


if __name__ == '__main__':
    import os
    HOST = os.environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(os.environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    app.run(HOST, PORT)


テンプレートのHTMLです。

templates/index.html
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="utf-8" />
  <title></title>
</head>
<body>
  <h1>チェックボックスの入力を受け取るデモ</h1>

  <form method="post" action="/">
    <div>チェックして、ボタンをクリックしてください。</div>
    <input name="checkbox1" type="checkbox"><label for="checkbox1">CheckBox1</label><br>
    <input name="checkbox2" type="checkbox"><label for="checkbox2">CheckBox2</label><br>
    <input type="submit">
  </form>

  <hr>
  <div>結果</div>
  <div>{{ output_message1 }}</div>
  <div>{{ output_message2 }}</div>
</body>
</html>

解説

HTMLのページではPOSTのフォームを作成してチェックボックスのチェック状態を Submitボタンがクリックされたタイミングで、サーバーに送信します。

  <form method="post" action="/">
    <div>チェックして、ボタンをクリックしてください。</div>
    <input name="checkbox1" type="checkbox"><br>
    <input name="checkbox2" type="checkbox"><br>
    <input type="submit">
  </form>


サーバー側では、 request.form.get() メソッドでチェックボックスのチェック状態を取得します。 チェックされていない場合は、値がNoneTypeとなりますので、チェックがされていない旨のメッセージを設定します。

    value1 = request.form.get('checkbox1')
    value2 = request.form.get('checkbox2')
    if value1 is None: 
      value1 = "チェックなし"
    if value2 is None: 
      value2 = "チェックなし"


テンプレートページの出力メッセージを設定します。

    result1 = "ChecktBox1:" + value1 
    result2 = "ChecktBox2:" + value2
    return render_template("index.html", output_message1=result1, output_message2=result2)

実行結果

プロジェクトを実行します。下図のページが表示されます。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像1

チェックボックスにチェックをつけ、[送信]ボタンをクリックします。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像2

ページが切り替わり、ページの下部に"ChekcBox1:on" "ChekcBox2:on" のメッセージが表示されます。 2つのチェックボックスがチェックされていたことが検出できています。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像3

CheckBox1のみをチェックしていた場合は下図の表示となります。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像4

チェックボックスをチェックしていなかった場合は、下図の表示となります。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像5

チェックボックスの値の設定

先のプログラムでは、チェックボックスをチェックしてSubmitボタンをクリックした遷移後の画面で、 チェックボックスのチェックがすべて解除されてしまう動作でした。
プログラムを変更して、チェック状態に応じてチェックボックスのチェックがついた状態で画面を表示する動作にします。

チェックボックスの状態を設定する場合は、サーバー側から、チェックボックスにinputタグに check 属性を出力できるよう修正します。

コード

以下のコードを記述します。

app.py
from urllib import request
from flask import Flask, render_template, request
app = Flask(__name__)

# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app

@app.route('/')
def func1():
    return render_template("index.html")

@app.route('/',methods=['POST'])
def func2():
    value1 = request.form.get('checkbox1')
    value2 = request.form.get('checkbox2')
    if value1 is None: 
      value1 = "チェックなし"
    if value2 is None: 
      value2 = "チェックなし"
      
    if value1 == "on":
      chk1="checked"
    else:
      chk1=""

    if value2 == "on":
      chk2="checked"
    else:
      chk2=""

    result1 = "ChecktBox1:" + value1 
    result2 = "ChecktBox2:" + value2
    return render_template("index.html", output_message1=result1, output_message2=result2, checked1=chk1, checked2=chk2)


if __name__ == '__main__':
    import os
    HOST = os.environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(os.environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    app.run(HOST, PORT)


テンプレートのHTMLです。

templates/index.html
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="utf-8" />
  <title></title>
</head>
<body>
  <h1>チェックボックスの入力を受け取るデモ</h1>

  <form method="post" action="/">
    <div>チェックして、ボタンをクリックしてください。</div>
    <input id="chk1" name="checkbox1" type="checkbox" {{checked1}}><label for="chk1">CheckBox1</label><br>
    <input id="chk2" name="checkbox2" type="checkbox" {{checked2}}><label for="chk2">CheckBox2</label><br>
    <input type="submit">
  </form>

  <hr>
  <div>結果</div>
  <div>{{ output_message1 }}</div>
  <div>{{ output_message2 }}</div>
</body>
</html>

解説

チェックボックスのinputタグ内に {{checked1}} {{checked2}} の変数の埋め込みを追加します。

    <input id="chk1" name="checkbox1" type="checkbox" {{checked1}}><label for="chk1">CheckBox1</label><br>
    <input id="chk2" name="checkbox2" type="checkbox" {{checked2}}><label for="chk2">CheckBox2</label><br>


チェックボックスの値が "on" であった場合には "checked" を出力します。

  if value1 == "on":
    chk1="checked"
  else:
    chk1=""

  if value2 == "on":
    chk2="checked"
  else:
    chk2=""
    return render_template("index.html", output_message1=result1, output_message2=result2, checked1=chk1, checked2=chk2)

実行結果

プロジェクトを実行します。下図のページが表示されます。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像6

2つのチェックボックスにチェックをつけ[送信]ボタンをクリックします。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像7

ページ遷移し、ページの下部にチェック状態のメッセージが表示されます。 先のプログラムではチェックボックスの状態が解除されましたが、このプログラムではチェック状態が維持された状態で表示されます。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像8

同様に[CheckBox2]のみをチェックした状態で[送信]ボタンをクリックします。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像9

ページ遷移後、ページ下部にはCheckBox2がチェックされたメッセージが表示されます。 チェックボックスもCheckBox2がチェックされた状態でページが表示されます。
Flask アプリケーションでチェックボックスの値を取得、設定するコードと実行結果:画像10


チェックボックスのチェック状態を設定することができました。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2025-01-19
Copyright © 1995–2025 iPentec all rights reserverd.