Flaskのredirect()
関数は、ユーザーをウェブアプリケーション内を案内する上で不可欠です。フォーム送信やログインなど、特定のアクションの後、ユーザーをシームレスに異なるURLへ遷移させることができます。しかし、単純なリダイレクトだけでは不十分な場合も多く、新しいページにデータを渡す必要があることがよくあります。この記事では、Flaskアプリケーションでパラメータと共にredirect()
を効果的に使用する方法を説明し、セキュリティのベストプラクティスに焦点を当てます。
目次
パラメータ受け渡しが必要となる理由
コアとなるredirect()
関数は、本質的にパラメータを直接渡すことをサポートしていません。入力としてURLを受け取ります。データを送信するには、URLパラメータまたはサーバー側のセッション管理を利用する必要があります。
方法1:機密でないデータにURLパラメータを使用する
最も一般的なアプローチは、クエリ文字列(疑問符「?」の後の部分)としてURLにパラメータを追加することです。パラメータは、アンパサンド「&」で区切られたキーと値のペアです。
from flask import Flask, render_template, redirect, url_for, request
app = Flask(__name__)
@app.route('/form', methods=['GET', 'POST'])
def my_form():
if request.method == 'POST':
name = request.form['name']
age = request.form['age']
return redirect(url_for('success', name=name, age=age))
return render_template('form.html')
@app.route('/success')
def success():
name = request.args.get('name')
age = request.args.get('age')
return f"Success! Name: {name}, Age: {age}"
if __name__ == '__main__':
app.run(debug=True)
<form method="POST">
<label for="name">名前:</label>
<input type="text" id="name" name="name"><br><br>
<label for="age">年齢:</label>
<input type="text" id="age" name="age"><br><br>
<input type="submit" value="送信">
</form>
これにより、/success?name=John&age=30
のようなURLが作成されます。url_for
はパラメータ処理を簡素化します。
方法2:機密データにFlaskセッションを使用する
機密データ(ユーザーID、認証トークンなど)には、決してURLパラメータを使用しないでください。Flaskのセッションオブジェクトは、ユーザーのセッションにデータを関連付けるサーバー側のストレージを提供します。
from flask import Flask, render_template, redirect, url_for, request, session
app = Flask(__name__)
app.secret_key = 'your_secret_key' # 強力なランダムに生成されたキーに置き換えてください
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
# ...認証ロジック...
if username == "validuser":
session['username'] = username
return redirect(url_for('dashboard'))
return render_template('login.html')
@app.route('/dashboard')
def dashboard():
username = session.get('username')
if username:
return f"ようこそ、{username}さん!"
else:
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
非常に重要です。強力でランダムに生成されたsecret_key
を設定してください。これはセッションデータの暗号化に不可欠です。
適切な方法の選択
URLに表示される機密でないデータにはURLパラメータを使用します。機密性を維持する必要がある機密データにはセッションを使用します。
このガイドは、Flaskのredirect()
関数を使用した安全で効率的なパラメータ受け渡しを示し、スムーズで安全なユーザーエクスペリエンスを保証します。