GET と POST - Flask

フォルダ構成

ディレクトリ構成

  • flaskapp
    • templates
      • index.html
      • result.html
    • app.py

ファイル

flaskapp/app.py

from flask import Flask, render_template, request

app = Flask(__name__)

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

@app.route('/result', methods=["GET"])
def result_get():
    msg = request.args.get('msg', "")
    return render_template('result.html', message = msg)

@app.route('/result', methods=["POST"])
def result_post():
    msg = request.form["msg"]
    return render_template('result.html', message = msg)

flaskapp/templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>flask app/index</h1>
  <form action='/result'>
    <input type="text" name="msg">
    <button type="submit" formmethod="GET">GET送信</button>
    <button type="submit" formmethod="POST">POST送信</button>
  </form>
</body>
</html>

flaskapp/templates/result.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>flask app/result</h1>
  <p>{{message}}</p>
</body>
</html>

GET と POST の処理を関数内で分岐する場合

GET と POST を関数内で分岐するには以下のようにします。

@app.route('/result', methods=["GET", "POST"])
def result_get():
    if(request.method == "GET"):
        msg = request.args.get('msg', "")
        return render_template('result.html', message = msg)
    else:
        msg = request.form["msg"]
        return render_template('result.html', message = msg)