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 %}