2012-02-12 277 views
7

我想在Flask的一個jinja模板中發出一個POST請求。但是,默認情況下,參數通過GET傳遞,而此特定方法只接受POST請求。在Flask中用url_for發出一個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,錯誤消息是相同的)。

+0

謝謝,不知道'_method' ARG。 – iurii 2014-05-25 10:40:51

回答

10

所有鏈接都是GET請求。你不能強制POST

另一種方法是這樣的:

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

你必須找到一個很好的辦法,迫使你的代碼忽略你發送一個GET請求。

+0

嗯,有沒有其他方式做到這一點,而不通過網址傳遞信息,那麼,表單的方式呢?這實際上並不是呈現給用戶的方式,但是它是相同的想法(向用戶呈現的選擇)。 – chimeracoder 2012-02-12 07:04:16

+0

不幸的是,您無法發送沒有AJAX或表單的POST請求。 – Blender 2012-02-12 07:14:51

2

您可以製作僅包含提交按鈕的表單,也可以使用AJAX或其他客戶端腳本發送POST。據我所知,儘管如此,你不能發送鏈接發送郵件。

0

您可以添加一個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>