【问题标题】:Issue a POST request with url_for in Flask在 Flask 中使用 url_for 发出 POST 请求
【发布时间】:2012-03-04 01:12:22
【问题描述】:

我正在尝试在Flask 中的Jinja 模板中发出 POST 请求。但是,默认情况下,参数是通过 GET 传入的,并且这个特定的方法只接受 POST 请求。

我尝试指定_method,如下所示,但它仍然使用GET而不是POST传递参数。

<li><a href = "{{ url_for('save_info', _method='POST', filepath=s.name ) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li>

(无论我是否specify _method,错误信息都是一样的)。

【问题讨论】:

  • 谢谢,不知道_method arg。

标签: python http-post flask jinja2


【解决方案1】:

所有链接都是GET 请求。你不能强制POST。

另一种选择是:

@app.route('/save_info/<filepath>', methods=['GET', 'POST'])
def save_info(filepath):
  if request.method == 'POST' or filepath:
    ...

您必须找到一种很好的方法来强制您的代码忽略您发送的 GET 请求。

【讨论】:

  • 嗯,有没有其他方法可以在不通过 URL 传递信息的情况下做到这一点,那么,表单的方式呢?这实际上并不是呈现给用户的形式本身,但它是相同的想法(呈现给用户的选择)。
  • 很遗憾,如果没有 AJAX 或表单,您将无法发送 POST 请求。
【解决方案2】:

您可以制作一个仅包含提交按钮的表单,也可以使用 AJAX 或其他一些客户端脚本发送 POST。但据我所知,您不能让链接发送 POST。

【讨论】:

    【解决方案3】:

    您可以添加一个 Middelway 来搜索覆盖 http 方法的 GET 参数。 看那里:http://flask.pocoo.org/snippets/38/

    您的新链接将如下所示:

    <li><a href = "{{ url_for('save_info', __METHOD_OVERRIDE__='POST', filepath=s.name ) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li>
    

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2017-11-28
      • 1970-01-01
      • 2019-04-07
      • 2020-08-15
      相关资源
      最近更新 更多