我有一个小 flask 应用程序,在我的 html 页面中,我有如下链接:

<a href="/manage_items?delete=item_1"> Delete </a>

我的 Flask 应用程序处理请求如下:
@app.route('/manage_items', methods=['GET', 'POST'])
def manage_items():
    delete_action = request.args.get("delete", None)
    if delete_action is not None:
        print("Deleting  {} ".format(delete_action)) # Do something
    return render_template('manage_items.html')

我的问题是,当页面在 render_template 之后返回时,在我的 URL 中我看到旧的删除操作,例如:
http://my-address/manage_items?delete=item_1

如果我点击刷新,它将尝试再次删除该对象。这是一种不受欢迎的行为。如何从旧的 args 重置/清理 flask 请求?

最佳答案

您可以为此使用 redirect:

from flask import redirect

# ...

@app.route('/manage_items', methods=['GET', 'POST'])
def manage_items():
    delete_action = request.args.get("delete", None)
    if delete_action is not None:
        print("Deleting  {} ".format(delete_action)) # Do something
        # redirecting to the *same page*, but without parameters
        return redirect(request.path,code=302)
    return render_template('manage_items.html')

所以这里不是提供渲染的模板,而是返回一个重定向请求,浏览器将获取页面 /manage_items ,但没​​有参数。

尽管如此,作为 @DanielRoseman says ,通常 不是 一个好主意,在 URL 中编码具有副作用的请求。一个爬虫,比如 Google 的爬虫,通常会分析你的页面,并访问每个 URL。所以这意味着爬虫会在这种情况下意外删除对象。您最好为此使用 POST。

关于python - 如何在 flask 应用程序中重置/清理请求参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42924845/

10-16 22:54