方法不允许所请求的URL不允许使用该方法。在DELETE方法烧瓶上

时间:2015-10-22 20:20:22

标签: python flask

我正在尝试为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 %}

1 个答案:

答案 0 :(得分:0)

我也知道这个问题:)

在此questionhere中,我们会解释为html method的{​​{1}}字段仅接受<form>GET为有效值。您给它的值为POST。我想它会回归到任何其他有效值。

您确实可以验证烧瓶日志中实际使用的方法。 由于退回,您的DELETE视图将使用/delete参数中不存在的方法进行访问。

有两种方法可以解决这个问题。

  1. methodsGET可以访问该视图。这是两个选项中较差的一个,因为POST请求不应该有任何副作用且它不是RESTful

  2. 您可以使用GET请求,而不是使用“内置”html表单。

  3. 对于第二个选项,您将使用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