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

Python 如何使用url中未显示的参数重定向?,python,flask,Python,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=('P

我有一个烧瓶应用程序,视图如下:

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


我尝试从重定向中更改/删除代码参数,但都没有成功。

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

url\u用于(“签出”,数据=…,源=…)
创建签出视图的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) ?
有两点需要注意:

  • 您不需要对会话进行json编码,它可以保存任何python对象
  • 如果要使用会话,您需要在flask配置中提供一个
    密钥

  • 更多的会话和如何提供一个秘密密钥外观

    您需要定义<代码>签出< /代码>及其接受URL部分的代码,用于<代码>源代码>代码>和<代码>数据>代码>,尽管将一个JSON字符串放在URL的中间将看起来类似于您现在的版本。但是,如果
    数据
    来自帖子正文,则307将处理将其传递到下一页的操作,而不需要将其包含在
    重定向
    调用中。