Flask SQLAlchemy 中的表单删除方法不起作用
form delete method in flask SQLAlchemy not working
我试图让页面显示个人详细信息,底部有一个按钮,用于从数据库中删除个人并定向到主页。问题是由于某种原因,删除方法不起作用..
@app.route('/venues/<int:venue_id>')
def show_venue(venue_id):
data = Venue.query.get(venue_id)
return render_template('pages/show_venue.html', venue=data)
@app.route('/venues/<int:venue_id>', methods=['DELETE'])
def delete_venue(venue_id):
try:
Venue.query.filter_by(id=venue_id).delete()
db.session.commit()
except Exception as e:
print(e)
error = True
db.session.rollback()
finally:
db.session.close()
if not error:
flash('Venue was successfully deleted!')
return render_template('pages/home.html')
else:
flash('An error occurred. Venue ' +
request.form['name'] + ' could not be deleted.')
return None
在HTML里面:
...
<form class="form" method="DELETE" action="/venues/{{venue.id}}">
<input type="submit" value="Delete Venue">
</form>
...
控制台没有显示任何错误,但实际上什么也没做。只是 returns 到同一页面。
感谢帮助
我认为对于 delete
函数,您需要将要删除的内容作为函数的参数传递。
item_to_be_deleted = Venue.query.filter_by(id=venue_id)
db.session.delete(item_to_be_deleted)
已编辑:
例如,如果您通过 Postman 发送查询,而不是使用 html-form,您可以删除条目吗?
根据评论中链接的另一个 post,Web 浏览器无法发送 PUT 和 DELETE 方法。他们只发送 GET 和 POST。所以这可能与此有关!!
如果您更改浏览器传递的方法,它可能会成功!
我试图让页面显示个人详细信息,底部有一个按钮,用于从数据库中删除个人并定向到主页。问题是由于某种原因,删除方法不起作用..
@app.route('/venues/<int:venue_id>')
def show_venue(venue_id):
data = Venue.query.get(venue_id)
return render_template('pages/show_venue.html', venue=data)
@app.route('/venues/<int:venue_id>', methods=['DELETE'])
def delete_venue(venue_id):
try:
Venue.query.filter_by(id=venue_id).delete()
db.session.commit()
except Exception as e:
print(e)
error = True
db.session.rollback()
finally:
db.session.close()
if not error:
flash('Venue was successfully deleted!')
return render_template('pages/home.html')
else:
flash('An error occurred. Venue ' +
request.form['name'] + ' could not be deleted.')
return None
在HTML里面:
...
<form class="form" method="DELETE" action="/venues/{{venue.id}}">
<input type="submit" value="Delete Venue">
</form>
...
控制台没有显示任何错误,但实际上什么也没做。只是 returns 到同一页面。 感谢帮助
我认为对于 delete
函数,您需要将要删除的内容作为函数的参数传递。
item_to_be_deleted = Venue.query.filter_by(id=venue_id)
db.session.delete(item_to_be_deleted)
已编辑: 例如,如果您通过 Postman 发送查询,而不是使用 html-form,您可以删除条目吗?
根据评论中链接的另一个 post,Web 浏览器无法发送 PUT 和 DELETE 方法。他们只发送 GET 和 POST。所以这可能与此有关!!
如果您更改浏览器传递的方法,它可能会成功!