在Flask中使用url_for发出POST请求

时间:2012-02-12 06:16:43

标签: python http-post flask jinja2

我正在尝试在JinjaFlask模板中发出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,错误信息都是相同的。)

3 个答案:

答案 0 :(得分:12)

所有链接都是GET个请求。您无法强制POST

另一种选择是:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

你可以添加一个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>