Flaskページ間で変数を渡すにはどうすればいいですか? 質問する

Flaskページ間で変数を渡すにはどうすればいいですか? 質問する

次のようなケースがあるとします。

@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)

おすすめ記事