青ポスの部屋

旅と技術とポエムのブログ

flaskでformのデータを受ける

概要

  • formからGET、POSTメソッドでデータを送る。
  • flaskでデータを処理する。

formでデータを送る

formでデータを送るのはwebの基本です。静的ページでやり取りする場合、具体的には次の流れになります。

  1. ブラウザでサーバにアクセスする
  2. サーバはformのページを返す(flask)
  3. ブラウザでformにデータを入力してbuttonで送信する(html)
  4. サーバは受けた結果を処理し、htmlに整形して送信する(flask)
  5. ブラウザはhtmlを表示する

ここでは、formそのものとその結果の2つのURLを用意する必要があります。

htmlのform

formはユーザに情報を入力させ、サーバにデータを送信することができます。

formタグにはactionとmethodの2つの属性を定義します。actionでは入力された情報を送信する宛先のURLを定義します。methodにはGETかPOSTのメソッドを書きます。GETとPOSTはhttpで情報を送信するときに使われるメソッドで、詳しくはほかのサイトに譲ります。

flaskでデータを受ける

flaskで受け取ったパラメータを処理するには、flask.requestモジュールを使います。

GETで受けたパラメータはrequest.args.get(myparam)、POSTで受けたパラメータはrequest.form["myparam"]で取得できます。

templateを使う

実際に送るhtmlですが、flaskを使う場合はtemplatesというディレクトリを作ってその中に入れておく必要があります。

サンプル

フォームに入力した内容をオウム返しするサンプルです。

サーバ側(flask)

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/test_form")
def test_form():
    return render_template("test_form.html",title="test_form")

@app.route("/result",methods=["POST"])
def mama():
    return request.form["myparam"] + "と受信しました"

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

クライアント側(html)

<!doctype html>
<html>
<head>
    <title>{{ title }}</title>
</head>

<body>
    テストフォーム<br>
    <form action="http://localhost:5000/result" method="POST">
        <div>
            <label for="myparam">入力してください</label>
            <input name="myparam" id="myparam">
        </div>
        <div>
            <button>submit</button>
        </div>
    </form>
</body>

</html>

参考

html

webを勉強するならやっぱりMozillaのドキュメントですね。

flask