用python flask从数据库中删除行?

2024-05-04 07:05:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是flask框架,似乎无法从数据库中删除行。下面的代码给出了一个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>

Tags: 方法代码py框架id数据库urlflask
3条回答

单击<a href...>delete</a>将发出一个GET请求,而您的delete_entry方法只响应POST。

你需要一个。用表单提交按钮或2替换链接。让链接用JavaScript提交一个隐藏的表单。

以下是操作方法1:

<form action="/delete/{{ entry.id }}" method="post">
    <input type="submit" value="Delete />
</form>

下面是使用jQuery执行2的方法:

$(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还有更多细节。

或者,将POST更改为DELETE,让您继续。

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

理想情况下,应该使用HTTP DELETE方法。

我用flaskr作为烧瓶项目的基础(看起来你也这么做了)。

在.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的链接。

相关问题 更多 >