我有一个小瓶子应用程序,在我的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重置/清理烧瓶请求?
答案 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。