2016-07-14 9 views
1

Ich habe eine Flasche App und Ansicht wie folgt aus:Wie umleiten mit Parametern, die nicht in URL angezeigt werden?

@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']) 
    ... 

alles funktioniert, außer nach der Fein umleiten Ich habe URL wie

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

aber ich will es klar sein, ohne params in url. Wie kann ich es erreichen?

Ich habe versucht, Code param von Redirect zu ändern/zu entfernen, keiner funktionierte.

+0

Sie bräuchten definieren 'checkout' und seine Route URL Teile für' source' und 'data' zu akzeptieren, obwohl ein Putting JSON-Zeichenfolge in der Mitte einer URL wird Version ähnlich wie Sie jetzt haben. Wenn 'data' jedoch aus dem Post-Body stammen, wird Ihr 307 die Weiterleitung an die nächste Seite übernehmen und Sie müssen es nicht in den' redirect'-Aufruf einbeziehen. – dirn

Antwort

1

Sie erhalten diese Parameter, weil Sie explizit Kolben sagen ihnen zu generieren:

url_for("checkout", data=..., source=...) schafft die URL zur Kasse Ansicht der Parameter „Daten“ und „Quelle“ includeing. Wenn du sie nicht willst, lass sie weg.

Aber ich sehe, dass Sie einige Daten herumreichen müssen. In Ihrem Fall wäre es sinnvoll, die Sitzung für diese Aufgabe zu verwenden:

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

Zwei Dinge zu beachten:

  1. Sie müssen nicht für die Sitzung JSon codiert etwas, kann es halten Jedes Python-Objekt
  2. Sie müssen eine SECRET_KEY in Ihrer Kolbenkonfiguration angeben, wenn Sie die Sitzung verwenden möchten.

Weitere Informationen über die Sitzungen und wie ein geheimer Schlüssel Look geben here