フロントエンドの作業を処理するJSクライアントを備えたFlaskバックエンドで実行されているWebアプリケーションがあります。flask.session
単純な Flask API を使用してキーと値のペアを Flask のセッション オブジェクト ( ) に保存しようとすると、問題が発生します。
変更しようとしているセッション オブジェクトが呼び出されaccount_id
、2 つの API ルートは基本的に次のようになります。
得る
@access_service.route('/current_account.json', methods=['GET'])
@login_required
def show_current_account():
return jsonify(account_id=session.get('account_id'))
役職
@access_service.route('/current_account.json', methods=['POST'])
@login_required
def update_current_account():
if request.json:
session['account_id'] = request.json['account_id']
return jsonify(account_id=session.get('account_id'))
return jsonify()
JS フロントエンドでは、POST ルートへの呼び出しは次のように行われます。
$.ajax({
url: '/current_account.json',
contentType: 'application/json',
type: 'POST',
data: JSON.stringify({ 'account_id': 10 })
});
正しく動作しているように見えますが、ajax 呼び出しは 200 OK と正しい戻り値を返します。account_id
Flask アプリケーションからログを記録すると、セッションに値 10のキーが含まれていることもわかります。ただし、 /current_account.json
POST リクエストが行われた直後に検索すると、単純にaccount_id
with valueが返されますnull
。
さらに奇妙なのは、単純なブラウザー内 REST クライアントを使用して同一の POST 要求を作成するとcurrent_account.json
、セッションが機能し、ページ全体の更新などによって期待どおりに持続することです。問題は、Flask のセッション オブジェクトではなく、リクエスト自体に関係していますが、正確に何が原因なのかはわかりません。