如何在烧瓶应用程序中重置/清除请求args

时间:2017-03-21 10:44:48

标签: python flask

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

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

My 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重置/清理烧瓶请求?

1 个答案:

答案 0 :(得分:3)

您可以使用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相同的抓取工具通常会分析您的网页,并访问每个网址。这意味着抓取工具会意外删除此方案中的对象。你最好使用POST。