我有一个小型 Flask 应用程序,在我的 html 页面中我有如下链接:
<a href="/manage_items?delete=item_1"> Delete </a>
Run Code Online (Sandbox Code Playgroud)
我的 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')
Run Code Online (Sandbox Code Playgroud)
我的问题是,当页面在 render_template 之后返回时,在我的 URL 中我看到旧的删除操作,如下所示:
http://my-address/manage_items?delete=item_1
Run Code Online (Sandbox Code Playgroud)
如果我点击刷新,它将尝试再次删除该对象。这是一种不受欢迎的行为。如何重置/清理旧参数的烧瓶请求?
您可以使用 aredirect来实现:
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')Run Code Online (Sandbox Code Playgroud)
因此,在这里您不提供渲染的模板,而是返回一个重定向请求,然后浏览器将获取页面/manage_items,但不带参数。
然而,正如@DanielRoseman 所说,在 URL 中对带有副作用的请求进行编码通常不是一个好主意。爬虫(例如 Google 的爬虫)通常会分析您的页面并访问每个URL。因此,这意味着爬虫会在这种情况下意外删除对象。为此,您最好使用 POST。
| 归档时间: |
|
| 查看次数: |
7741 次 |
| 最近记录: |