Flask の request オブジェクトでフォームデータを取得する

Flask ではリクエストに関する情報を request オブジェクトから取得できる。フォームから送信されたデータを受け取るには、request.form を使う。

request オブジェクトのインポート

from flask import Flask, request

app = Flask(__name__)

request はグローバルオブジェクトのように見えるが、実際にはスレッドローカルな変数であり、リクエストごとに異なる値を持つ。

フォームデータの取得

HTML フォームから POST で送信されたデータは request.form で取得する。

<form method="POST" action="/login">
    <input type="text" name="username">
    <input type="password" name="password">
    <button type="submit">Login</button>
</form>
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        return f'Welcome, {username}!'
    return render_template('login.html')

request.form は辞書ライクなオブジェクトで、name 属性の値をキーとしてアクセスする。

キーが存在しない場合の対処

存在しないキーにアクセスすると KeyError が発生する。get メソッドを使えばデフォルト値を返せる。

username = request.form.get('username', '')

クエリパラメータの取得

GET リクエストの URL パラメータ(?key=value 形式)は request.args で取得する。

@app.route('/search')
def search():
    q = request.args.get('q', '')
    return f'Searching for: {q}'

/search?q=flask にアクセスすると、q'flask' が入る。