如何使用Flask框架从数据库中删除项目?

7
我正在使用Flask框架,并尝试从数据库中删除一个条目。以下代码会出现错误:“所请求的URL不允许该方法。”
在HTML中:
<form action="{{ url_for('delete_entry', id=entry.id) }}" method="POST">
     <input type="hidden" name="_method" value="DELETE" />
     <input type="submit" value="Delete entry" />
</form>

在Python中:
@app.route('/delete', methods=['DELETE'])
def delete_entry(postID):
    if not session.get('logged_in'):
        abort(401)
    g.db.execute('delete from entries WHERE id = ?', [postID])
    flash('Entry was deleted')
    return redirect(url_for('show_entries'))

如何从HTML中获取正确的postID并传递到Python中呢?

1
你路由装饰器中引用的方法应该是POST而不是DELETE。 - b10n
@b10n 谢谢,那获取 postID 到函数中怎么做呢?我该怎么做? - Hayley van Waas
这里有几个不错的回答:[https://dev59.com/O4Pba4cB1Zd3GeqPuJIh](https://dev59.com/O4Pba4cB1Zd3GeqPuJIh) - fundatillus
2个回答

4

如果您要使用POST请求,则变量将在Flask的request.form下可用。如果您使用DELETE方法,则需要更改URI。例如:

@app.route('/delete/<int:postID>', methods=['DELETE'])

1

要获取文章ID,请使用{{ loop.revindex }}

这是我的代码,它能正常工作!

在.py文件中:

@app.route('/delete', methods=['POST'])
def delete_entry():
    if not session.get('logged_in'):
        abort(401)
    db = get_db()
    db.execute('delete from entries where id = ?'[request.form['entry_id']])
    db.commit()
    flash('Entry deleted')
    return redirect(url_for('show_entries'))

在HTML中:


<form action="{{ url_for('delete_entry') }}" method=post class=delete-entry>
          <input type="hidden" name="entry_id" value="{{ loop.revindex }}">
          <input type="submit" value="Delete" />
</form>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接