【问题标题】:Method Not Allowed The method is not allowed for the requested URL. on DELETE Method FlaskMethod Not Allowed 请求的 URL 不允许使用该方法。关于 DELETE 方法烧瓶
【发布时间】:2016-01-22 06:14:05
【问题描述】:

我正在尝试为 Flask 教程应用程序 Flaskr 编写删除方法。到目前为止,我已经能够设置一个删除方法并修改我的 html 以访问它,但是当我尝试使用它时,我收到一条错误消息,提示“方法不允许 请求的 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 %}

【问题讨论】:

    标签: python flask


    【解决方案1】:

    我也知道这个问题:)

    在此 SO questionhere 中,解释了 html &lt;form&gt;method 字段仅接受 GETPOST 作为有效值。你给它的值是DELETE。我想它会退回到任何其他有效值。

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

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

    1. 使视图可通过GETPOST 访问。这是两个选项中最差的一个,因为 GET 请求不应该有任何副作用,而且它不是 RESTful

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

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

    $("#delete_btn").click(function(){
        // send ajax request here
        return false; // prevent the form from submitting
    }
    

    delete_btn 将是您提交按钮的id

    <input id="delete_btn" value="Delete entry">
    

    对于实际的 ajax 请求,请使用 jQuery (see the docs) 中的 ajax 方法

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

    您还可以在ajax 方法中注册一个回调,以在成功时重新加载页面并在失败时显示警告或任何您想要的。

    请不要使用url_for函数填写ajax请求的url。这将不必要地将 javascript 耦合到您的 html。您应该改为将其写入提交按钮的自定义数据属性并使用 jQuery 读取该属性。 Like it is done here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2020-08-27
      • 1970-01-01
      • 2022-11-02
      • 2023-03-09
      • 2020-07-30
      • 2021-03-15
      相关资源
      最近更新 更多