我有一个小 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/