在Flask中从数据库删除元素
我想确保我在这里遵循最佳实践。我有一个数据表,这个表是从数据库中提取数据的,最后一列有编辑或删除这一行的链接。我一直听说不要用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或视图。