Flask Formリクエストの取得

FlaskでFormリクエストを取得する場合、以下の方法を行う

from flask import request

# GETリクエストの場合
var1 = request.args.get('var1')

# POSTリクエストの場合
var1 = request.form.get('var1')

# GETかPOSTか確認する
request.method

# 関数が対応するリクエストを指定する
@app.route('/', methods=['GET', 'POST']
   # リクエストで実行されるホスト名とパラメータを取得できる
   print(request.full_path)
   
   # GETかPOSTか取得できる
   print(request.method)
   
   # Dictionary形式でパラメータを取得できる
   print(request.args)

プログラムのサンプルは以下となる

# ①app.py
from flask import Flask, render_template, request

app = Flask(__name__)


# form情報を格納するクラス
class UserInfo:
   def __init__(self, last_name, first_name, job, gender, message):
       self.last_name = last_name
       self.first_name = first_name
       self.job = job
       self.gender = gender
       self.message = message


# サインインページ
@app.route('/signup')
def sign_up():
   return render_template('signup.html')


# サインイン情報を表示するページ
@app.route('/home', methods=['GET', 'POST'])
def home():

   user_info = UserInfo(
       request.form.get('last_name'),
       request.form.get('first_name'),
       request.form.get('job'),
       request.form.get('gender'),
       request.form.get('message')
   )

   return render_template('home.html', user_info=user_info)


if __name__ == '__main__':
   app.run(debug=True)
# ②signup.html (form入力画面)
{% extends "base.html" %}
{% block content %}
<h1>サインアップページ</h1>
<form action="{{ url_for('home') }}" method="POST">
   <div>
       <label for="last_name">名字: </label>
       <input type="text" name="last_name">
   </div>
   <div>
       <label for="first_name">名前: </label>
       <input type="text" name="first_name">
   </div>
   <div>
       <label for="job">職業: </label>
       <select name="job">
           <option value="">選択して下さい</option>
           <option value="会社員">会社員</option>
           <option value="公務員">公務員</option>
           <option value="自営業">自営業</option>
       </select>
   </div>
   <div>
       <input type="radio" name="gender" value="男性">男性
       <input type="radio" name="gender" value="女性">女性
   </div>
   <div>
       <textarea name="message" rows="4" cols="40"></textarea>
   </div>
   <div>
       <input type="submit" value="送信">
   </div>
</form>
{% endblock %}
# ③home.html(signup.htmlで入力した情報を表示する画面)
{% extends "base.html" %}
{% block content %}
<h1>サインアップに完了しました</h1>
<p>{{ user_info.last_name }} {{ user_info.first_name }} ({{ user_info.gender }})</p>
<p>{{ user_info.job }}</p>
<p>一言: {{ user_info.message }}</p>
{% endblock %} 


いいなと思ったら応援しよう!