如何在烧瓶应用程序中重置/清理请求参数

Dar*_*ioB 6 python flask

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

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

Wil*_*sem 4

您可以使用 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。