アプリ

【Flask,Python】formタグの使い方

PythonのフレームワークであるFlaskでformタグの使い方を解説します。

この方法は、Django等でも同様なので、他のpythonフレームワークでも応用可能です。

Point!

  • formに入力値をFlaskで取得できるように記述(HTML)
  • formで入力値をFlaskで取得、引き渡し(Python,Flask)
  • Flaskで処理した値やテキストの取得(HTML)

ファイル構成

sample
│ flask.py # formの値を受け取り、遷移先のページに引き渡す
│
└─templates
    │ base.html
    │ error.html
    │ form.html # form入力
    └─ age.html # formの値を引き継いで表示する

formに入力値をFlaskで取得できるように記述(HTML)

まずは、Flaskが受け取れるようなhtmlを書きます。今回は、例として年齢を入力するformを作成します。

{% extends 'base.html' %}
{% block body %}

<div>
  <form action="/age" method="POST"> #formタグでPOSTのリクエストを送信
      <div>
          <label for="formFile" class="form-label">私の年齢</label>
          <input type="number" class=".form-control-lg" name="age" step="1.0" max="120" min="0">
          <button type="submit" value="register">登録</button> #formの値を送信する
       </div>
   </form>
</div>

{% endblock %}

ポイントは以下です。

  • formタグにaction=’/ルーティング先’とmethod=’POST’の指定
  • inputタグでデータの種類とnameを指定
  • buttonタグでtype=”submit”記載する

formタグにaction=とmethod=’POST’の指定

action=”/ルーティング先”でflask.pyのルーティング先を指定します。

今回の場合、次章で説明するflask.pyの @app.route(‘/age’ , methods=[‘GET’,’POST’]) に値を渡したいので、 action=”/age” とします。

methodは、‘POST’としてください。理由については、他サイトを参照してください。

method GET POST” で検索かければ、出てくると思います。

inputタグでデータの種類とnameを指定

nameを指定しないと参照先がわからないので、nameを指定します。

例として、name = ‘age’ としています。

buttonタグでtype=”submit”記載する

これは、登録ボタンを作成しています。

submitはformタグに入力された値を送信する役割です。

formで入力値をFlaskで取得、引き渡し(Python,Flask)

from flask import Flask, render_template
import numpy as np

app = Flask(__name__)

@app.route('/form', methods=['GET', 'POST'])
def age():
    return render_template('form.html',)

@app.route('/age', methods=['GET', 'POST'])
def age():
    if request.method == 'POST':
        try:
            age= request.form.get('age')
            text = '私の年齢は' + str(age)

            return render_template('age.html',age=age,text=text)

        except ValueError:
            return render_template('error.html')

if __name__ == "__main__":
    app.run(debug=True)

ポイントは以下です。

  • request.method == ‘POST’
  • request.form.get
  • render_template

request.method == ‘POST’

先ほどのform.htmlで method=’POST’に設定しているので、flask側でもPOSTで受け取るように設定します。

request.form.get(‘ name ‘)でformの値を受け取る

form.htmlの<input>タグに name=’age’ を指定してので、’age’ を入力します

request.form.get(‘age’)

request.formは他にも request.form[‘name’] や request.form.getlist(‘name’) などがあり、必要に応じて使い分けます。

render_templateで受け取った値を引き渡す

render_template(遷移先, 変数, 変数,…..)で遷移先のhtmlと変数を引き渡します。

今回遷移先は age.html  ,変数として age=age, text=text としています

Flaskで処理した値やテキストの取得(HTML)

{% extends 'base.html' %}

{% block body %}

<p> 私の年齢は {{ age }}</p>
<p>{{ text }}</p>

{% endblock %}

ポイントは以下です。

  • {{ 変数 }}で受け取り

{{ 変数 }}で受け取り

{{ 変数 }} この変数の部分にflask.pyのrender_templateから引き継いだ変数を記入します。

今回は、{{ age }} と {{ text }} を引き継ぎます。

まとめ

Flaskを実行してうまくいけば、<p>タグの2行は同じように表示されるはずです。

初回は、request.methodsの設定や変数の引き渡し方、<form>の設定等でつまずくと思います。

ただ一度覚えてしまうと汎用性が非常に高いです。

また、今回はFlaskで実践しましたが、Djangoでも同様なので他のフレームワークで活用可能です。

プログラミングの勉強に悩んだら、、

プログラミングの勉強に悩んだら、『Udemy』をオススメします。

オススメのポイント
・全ての講座がオンライン
・リーズナブルな価格で、実用的なスキル
・購入した講座を何度でも見直せる
・プログラミングの講座が豊富

プログラミング言語の人気オンラインコース 開発の人気オンラインコース

アプリ
最新情報をチェックしよう!