如何使用url中未显示的参数重定向?

时间:2016-07-14 17:14:35

标签: python flask

我有一个Flask应用程序,并且查看如下:

@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中的params。 我怎样才能达到它?

我尝试从重定向更改/删除代码param,但都没有工作。

1 个答案:

答案 0 :(得分:1)

您获得这些参数是因为您明确告诉flask生成它们:

url_for("checkout", data=..., source=...)创建结帐视图的网址,其中包含参数“data”和“source”。如果你不想让他们离开。

但我发现你需要传递一些数据。在您的情况下,将会话用于该任务是有意义的:

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

有两点需要注意:

  1. 你不需要为会话进行json编码,它可以保存任何python对象
  2. 如果您想使用会话,则需要在烧瓶配置中提供SECRET_KEY
  3. 有关会话的更多信息以及如何提供密钥外观here