如何在 POST 请求后重定向到 GET 请求生成的 Flask 中的同一页面?

How do I redirect to the same page in Flask, generated by a GET request, following a POST request?

我正在使用 Python/Flask 创建一个网络应用程序。我正在使用蓝图。

假设我搜索了一本书,并通过 GET 请求在 URL /search?book=somebook&author=someauthor 处结束。在该页面上,我有每个结果的按钮,这些按钮会将结果保存到用户保存的书籍中。这将是一个 POST 请求。但是,我想 return 用户使用相同的 URL 参数访问相同的搜索页面。

所以流程是:

  1. 用户提交搜索并在 /search?book=somebook&author=someauthor
  2. 结束
  3. 用户点击订阅其中一个结果。 A POST 将书保存到用户的已保存图书中。
  4. 用户再次访问 /search?book=somebook&author=someauthor 并重新填充搜索结果页面。

我认为,错误地,我想要这样的东西:

@search_bp.route('/search', methods=["GET", "POST"])
def search():
    if request.method == "POST":
        # save book to user's saved books
        # somehow end up back on the same page from here

    elif request.method == "GET":
        # use request.args to populate page with results

        return render_template("search.html", books=books)

在我看来,我想 return redirect(url_for("search_bp.search")) 但不知何故让 request.args 回到 URL。我唯一的选择是对 URL 进行硬编码,即连接字符串 url = "/search?book=" + request.args.get("book") + "&author=" + request.args.get("author") 以便我可以 return redirect(url)?

您可以将 values/variables 传递给 flask.url_for,例如:

book = request.args.get('book')
author = request.args.get('author')
my_url = url_for('search_bp.search', book=book, author=author)

额外的 values/parameters 传递给 url_for 将作为 GET 参数添加到 URL,然后你可以做 return redirect(my_url).

https://flask.palletsprojects.com/en/1.1.x/api/#flask.url_for