使用python烧瓶从数据库中删除行?
Posted
技术标签:
【中文标题】使用python烧瓶从数据库中删除行?【英文标题】:Deleting rows from database with python flask? 【发布时间】:2014-11-14 20:03:08 【问题描述】:我正在使用烧瓶框架,似乎无法从数据库中删除行。下面的代码给出了 405 错误:“请求的 URL 不允许该方法。”有什么想法吗?
在py中:
@app.route('/delete/<postID>', methods=['POST'])
def delete_entry():
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', post=post))
在html中:
<a href="/delete/ entry.id "><h3>delete</h3></a>
【问题讨论】:
【参考方案1】:我使用flaskr 作为我的 Flask 项目的基础(看起来你也是这样做的)。
在.py中:
@app.route('/delete', methods=['POST'])
def delete_entry():
if not session.get('logged_in'):
abort(401)
g.db.execute('delete from entries where id = ?', [request.form['entry_id']])
g.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=" entry.id ">
<input type="submit" value="Delete" />
</form>
我想要一个按钮,但您可以轻松地使用带有解决方案 here 的链接。
【讨论】:
【参考方案2】:或者,将 POST 更改为 DELETE 以让您继续。
@app.route('/delete/<postID>', methods=['DELETE'])
理想情况下,您应该使用 HTTP DELETE 方法。
【讨论】:
以下是为什么不应该使用 GET 来修改数据的一些原因:***.com/questions/705782/… @user805981,在这个问题中为真:***.com/questions/5162960/…。您将使用 ajax 来发出“删除”,而不是使用表单方法本身。【参考方案3】:点击<a href...>delete</a>
会发出GET请求,而你的delete_entry方法只响应POST。
您需要 1. 将链接替换为表单和提交按钮,或者 2. 让链接使用 javascript 提交隐藏表单。
这里是如何做1:
<form action="/delete/ entry.id " method="post">
<input type="submit" value="Delete />
</form>
这里是如何做 2(使用 jQuery):
$(document).ready(function()
$("a.delete").click(function()
var form = $('<form action="/delete/' + this.dataset.id + '" method="post"></form>');
form.submit();
);
);
...
<a href="#delete" class="delete" data-id=" entry.id ">Delete</a>
您应该不做的一件事是让您的 delete_entry 方法响应 GET。 GET 意味着幂等(可以安全地重复运行并且不执行破坏性操作)。 Here's a question 提供更多详细信息。
【讨论】:
选项 1 不错。但唯一的问题是在记录时...它不会将其显示为 DELETE 而是 POST...【参考方案4】:HTML 中的简单<a href=
链接提交GET
请求,但您的路由只允许PUT
请求。
<a>
不支持PUT
请求。
您必须使用表单和/或 JavaScript 代码提交请求。
(见Make a link use POST instead of GET。)
【讨论】:
以上是关于使用python烧瓶从数据库中删除行?的主要内容,如果未能解决你的问题,请参考以下文章