次のようなケースがあるとします。
@app.route('/a', methods=['GET'])
def a():
a = numpy.ones([10,10])
...
return render_template(...) # this rendered page has a link to /b
@app.route('/b', methods=['GET'])
def b():
print a
....
レンダリングされたページには、ページ /a を /b に誘導するリンクが 1 つあります。変数 a をページ /b に渡して再利用しようとしています。この Flask アプリはどのように実行すればよいですか? セッションを使用する必要がありますか、それとも他の解決策がありますか?
ベストアンサー1
ユーザーが表示したり制御する必要のない Python 値を渡す場合は、セッションを使用できます。
@app.route('/a')
def a():
session['my_var'] = 'my_value'
return redirect(url_for('b'))
@app.route('/b')
def b():
my_var = session.get('my_var', None)
return my_var
セッションは辞書のように動作し、JSON にシリアル化されます。そのため、JSON シリアル化可能なものはすべてセッションに置くことができます。ただし、ほとんどのブラウザは 4000 バイトを超えるセッション クッキーをサポートしていないことに注意してください。
セッションに大量のデータを入れるのは避けるべきです。リクエストごとにクライアントとの間でデータを送受信する必要があるからです。大量のデータの場合は、データベースまたはその他のデータストレージを使用してください。Flask ではグローバル変数はスレッドセーフですか? リクエスト間でデータを共有するにはどうすればよいですか?そしてFlaskセッションごとに大きなデータまたはサービス接続を保存する。
テンプレートから URL に値を渡す場合は、クエリ パラメータを使用できます。
<a href="{{ url_for('b', my_var='my_value') }}">Send my_value</a>
次の URL が生成されます:
/b?my_var=my_value
これはbから読み取ることができます:
@app.route('/b')
def b():
my_var = request.args.get('my_var', None)