如何在 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 参数访问相同的搜索页面。
所以流程是:
- 用户提交搜索并在
/search?book=somebook&author=someauthor
结束
- 用户点击订阅其中一个结果。 A
POST
将书保存到用户的已保存图书中。
- 用户再次访问
/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
我正在使用 Python/Flask 创建一个网络应用程序。我正在使用蓝图。
假设我搜索了一本书,并通过 GET 请求在 URL /search?book=somebook&author=someauthor
处结束。在该页面上,我有每个结果的按钮,这些按钮会将结果保存到用户保存的书籍中。这将是一个 POST
请求。但是,我想 return 用户使用相同的 URL 参数访问相同的搜索页面。
所以流程是:
- 用户提交搜索并在
/search?book=somebook&author=someauthor
结束
- 用户点击订阅其中一个结果。 A
POST
将书保存到用户的已保存图书中。 - 用户再次访问
/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