在Flask中从数据库删除元素

2 投票
1 回答
5909 浏览
提问于 2025-04-18 13:38

我想确保我在这里遵循最佳实践。我有一个数据表,这个表是从数据库中提取数据的,最后一列有编辑或删除这一行的链接。我一直听说不要用GET请求来修改服务器上的数据。那么,我该如何用其他方式来删除这一行数据呢?

这是我数据表的代码:

<table class="table table-hover notifications">
    <thead><tr><th>Search Parameter</th><th>Subreddits</th><th>Actions</th></thead>
    {% for notification in notifications %}
    <tr>
        <td>{{ notification.q }}</td>
        <td>{% for s in notification.subreddits %} {{ s.r }}<br>  {% endfor %}</td>
        <td><a href="{{ url_for('main.edit_notification', id=notification.id) }}">Edit</a> | <a href="">Delete</a></td>
    </tr>
    {% endfor %}
</table>

我想我不太确定该如何构建删除的URL。我可以创建一个删除的方法,并传递我想删除的元素的ID(比如说:/delete/1),但这样不是还是在用GET请求修改数据吗?

1 个回答

4

你可以创建一个表单,当提交时会发送一个POST请求,这个请求会连接到一个视图,当request.method是POST时,就会删除指定的对象(正如你所说的,通过URL传递对象的ID)。

我不是Flask的专家,但可以参考这段代码,你的视图应该大致如下:

@app.route('/delete/<int:id>', methods=['POST'])
def remove(id):
    object = Object.query.get_or_404(id)
    delete(object)
    return redirect(url_for('index'))

而你的表单应该像这样:

<form method="post" action="{{ url_for('remove', id=object.id) }}">
  <button type="submit">Delete</button>
</form>

表单的action属性会强制表单把信息提交到指定的URL或视图。

撰写回答