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

2024-05-28 18:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python/Flask创建一个webapp。我用的是蓝图

假设我搜索一本书,并通过GET请求到达URL/search?book=somebook&author=someauthor。在该页面上,我为每个结果设置了按钮,这些按钮将结果保存到用户保存的书籍中。这将是一个POST请求。但是,我希望使用相同的URL参数将用户返回到相同的搜索页面

因此,流程是:

  1. 用户提交搜索并在/search?book=somebook&author=someauthor上结束
  2. 用户单击其中一个结果上的订阅。一个POST将书保存到用户保存的书中
  3. 用户再次进入/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)


Tags: 用户urlsearchgetreturnrequestargs页面
1条回答
网友
1楼 · 发布于 2024-05-28 18:42:20

您可以将值/变量传递给flask.url_for,例如:

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

传递给url_for的其他值/参数将作为GET参数添加到URL中,然后您可以执行return redirect(my_url)

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

相关问题 更多 >

    热门问题