Python 方法不允许该方法不允许用于请求的URL。关于删除方法

Python 方法不允许该方法不允许用于请求的URL。关于删除方法,python,flask,Python,Flask,我正在尝试为Flask教程应用程序Flaskr编写一个删除方法。到目前为止,我已经能够设置一个delete方法并修改我的html来访问它,但是当我尝试使用它时,我收到一个错误消息:“methodnotallowed该方法不允许用于请求的URL。” 这是我的方法 @app.route('/delete', methods=['DELETE']) def delete_entry(): if not session.get('logged_in'): abort(401)

我正在尝试为Flask教程应用程序Flaskr编写一个删除方法。到目前为止,我已经能够设置一个delete方法并修改我的html来访问它,但是当我尝试使用它时,我收到一个错误消息:“methodnotallowed该方法不允许用于请求的URL。”

这是我的方法

@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 %}
{%extends“layout.html”%}
{%block body%}
{%if session.logged_in%}
标题:
正文:
{%endif%}
    {entries%%中的条目的百分比}
  • {{entry.title}{{entry.text | safe}} {%else%}
  • 难以置信。到目前为止,这里没有参赛作品 {%endfor%}
{%endblock%}
我也知道这个问题:)

在这种情况下,解释为html
方法
字段仅接受
GET
POST
作为有效值。您给它的值是
DELETE
。我认为它将返回到任何其他有效值

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

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

  • 通过
    GET
    POST
    访问视图。这是两个选项中最糟糕的一个,因为
    GET
    请求不应该有任何副作用,也不是RESTful

  • 您可以使用
    ajax
    请求,而不是使用“内置”html表单

  • 对于第二个选项,您将使用jQuery为表单按钮注册一个事件处理程序

    $("#delete_btn").click(function(){
        // send ajax request here
        return false; // prevent the form from submitting
    }
    
    其中,
    delete\u btn
    将是您提交的
    id
    按钮

    <input id="delete_btn" value="Delete entry">
    
    您还可以在
    ajax
    方法中注册回调,以便在页面成功时重新加载页面,并在页面失败时显示警告或您想要的任何内容

    请不要使用
    url\u for
    函数填写ajax请求的url。这将不必要地将javascript耦合到html。您应该将其写入submit按钮的自定义数据属性中,并使用jQuery读取该属性

    $.ajax({
        url: "your delete url",
        method: "DELETE",
    })