在Flask中使用url_for发起POST请求

12 投票
3 回答
20533 浏览
提问于 2025-04-17 12:52

我正在尝试在一个 Jinja 模板中发起一个 POST 请求,使用的是 Flask 框架。不过,默认情况下,参数是通过 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>

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

3 个回答

2

你可以添加一个中间件,它会查找一个GET参数,这个参数可以覆盖HTTP请求的方法。你可以在这里查看: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>
2

你可以做一个只包含提交按钮的表单,或者使用AJAX或者其他客户端脚本来发送POST请求。根据我所知道的,链接是不能直接发送POST请求的。

19

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

另外一种方法是这样的:

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

你需要找到一个好的方法,让你的代码忽略你发送的是 GET 请求。

撰写回答