2016-07-14 21 views
1

私はフラスコのアプリを持っており、このようなビュー:URLに表示されていないパラメータでリダイレクトするにはどうすればよいですか?

@app.route("/", methods=('POST', 'GET')) 
def index(): 
... 
return redirect(url_for(
      'checkout', 
      data=json.dumps(data['data']), 
      source=source), code=307 
     ) 

@app.route("/checkout", methods=('POST', 'GET')) 
def checkout(): 
    data = json.loads(request.args['data']) 
    ... 

すべては私が

/checkout?source=&data={ ... } 

のようなURLを持っているが、私はそれがURL内のparamsせず、明らかになりたい、リダイレクト後を除いて正常に動作します。 どうすれば連絡できますか?

リダイレクトからコードparamを変更/削除しようとしましたが、どちらも機能しませんでした。あなたが明示的にそれらを生成するためにフラスコを伝えるため

+0

を提供するために、 URLの真ん中にあるJSON文字列は、あなたが現在持っているものと似たバージョンになります。しかし、 'data'がポストボディから来た場合、307はそれを次のページに渡すのを処理し、' redirect'コールにそれを含める必要はありません。 – dirn

答えて

1

あなたはこれらのパラメータを取得:

url_for("checkout", data=..., source=...)は、パラメータ「データ」と「ソース」をincludeing精算ビューへのURLを作成します。あなたがそれらを放置しないようにするならば。

しかし、データを渡す必要があることがわかります。お使いの場合には、それはそのタスクのためにセッションを使用するように理にかなって:注意すべき

from flask import session 

# in the index view 
session["data"] = your_data 
session["source"] = your_source 
return redirect(url_for("checkout")) 

# in the checkout view 
data = session.pop("data", None) 
source = session.pop("source", None) 
if data is not None and source is not None: 
    # do your stuff 
else: 
    # checkout view was accessed before the index view 
    # probably an error -> abort(400) ? 

2つのこと:

  1. あなたはJSON-エンコードするためのセッションのために何を必要としない、それが保持することができます任意のPythonオブジェクト
  2. セッションを使用する場合は、SECRET_KEYをフラスココンフィグレーションに指定する必要があります。パットがあなたは、 `source`と` data`のためのURLの部品を受け入れるように `checkout`とそのルートを定義する必要があるだろうセッションの詳細について

とどのように秘密鍵を見にhere

関連する問題