2012-02-12 9 views
7

私はFlaskのjinjaテンプレート内でPOSTリクエストを発行しようとしています。しかし、パラメータはデフォルトでGET経由で渡され、この特定のメソッドはPOST要求のみを受け入れます。Flaskでurl_forでPOSTリクエストを発行

私は以下のように_methodを指定しようとしましたが、POSTの代わりにGETを使ってパラメータを引き渡します。

<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'引数 '知りませんでした。 – iurii

答えて

10

すべてのリンクはGETです。 POSTを強制することはできません。

選択肢はこれを次のようになります。

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

あなたはGET要求を送信したことを無視するようにコードを強制的に良い方法を見つける必要があります。

+0

うーん、URLを介して情報を渡さずにこれを行う他の方法がありますか?フォームのやり方は?これは実際にユーザーに提示される方法ではフォームごとではありませんが、同じ考え(ユーザーに提示された選択)です。 – chimeracoder

+0

AJAXやフォームなしでは、悲しいことに 'POST'リクエストを送ることはできません。 – Blender

2

送信ボタンのみを含むフォームを作成することも、AJAXなどのクライアントサイドスクリプトを使用してPOSTを送信することもできます。私が知る限り、リンクをPOSTにすることはできません。

0

httpメソッドを上書きするGET引数を検索するMiddelwayを追加できます。 そこを見て: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>