我正在尝试为Flask教程应用程序Flaskr编写一个删除方法。到目前为止,我已经能够设置一个删除方法并修改我的html来访问它,但是当我尝试使用它时,我收到一条错误,说“方法不允许该方法不允许所请求的URL。” / p>
这是我的方法
@app.route('/delete', methods=['DELETE'])
def delete_entry():
if not session.get('logged_in'):
abort(401)
g.db.execute('delete from entries')
g.db.commit()
flash('Entry was successfully deleted')
return redirect(url_for('show_entries'))
这是我的HTML文件
{% extends "layout.html" %}
{% block body %}
{% if session.logged_in %}
<form action="{{ url_for('add_entry') }}" method=post class=add-entry>
<dl>
<dt>Title:
<dd><input type=text size=30 name=title>
<dt>Text:
<dd><textarea name=text rows=5 cols=40></textarea>
<dd><input type=submit value=Share>
</dl>
</form>
{% endif %}
<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.title }}</h2>{{ entry.text|safe }}
<form action="{{ url_for('delete_entry') }}" method=delete class=delete_entry>
<input type="submit" value="Delete entry" />
</form>
{% else %}
<li><em>Unbelievable. No entries here so far</em>
{% endfor %}
</ul>
{% endblock %}
答案 0 :(得分:0)
我也知道这个问题:)
在此question或here中,我们会解释为html method
的{{1}}字段仅接受<form>
和GET
为有效值。您给它的值为POST
。我想它会回归到任何其他有效值。
您确实可以验证烧瓶日志中实际使用的方法。
由于退回,您的DELETE
视图将使用/delete
参数中不存在的方法进行访问。
有两种方法可以解决这个问题。
methods
或GET
可以访问该视图。这是两个选项中较差的一个,因为POST
请求不应该有任何副作用且它不是RESTful
您可以使用GET
请求,而不是使用“内置”html表单。
对于第二个选项,您将使用jQuery为表单按钮注册一个事件处理程序。
ajax
其中$("#delete_btn").click(function(){
// send ajax request here
return false; // prevent the form from submitting
}
将是您提交按钮的delete_btn
。
id
对于实际的ajax请求,请使用jQuery中的<input id="delete_btn" value="Delete entry">
方法(see the docs)
ajax
您还可以在$.ajax({
url: "your delete url",
method: "DELETE",
})
方法中注册回调,以便在成功时重新加载页面,并在失败时或任何您想要的时间显示警告。
请不要使用ajax
函数填写ajax请求的网址。这将不必要地将javascript与你的html结合起来。您应该将其写入提交按钮的自定义数据属性,并使用jQuery读取该属性。 Like it is done here