2013-03-18 23 views
20

私はフラスコで作業しています。 リクエストメソッド、つまり「POST」メソッドを保持している別のURLに投稿リクエストをリダイレクトする必要がある状況です。 「GET」リクエストを別のURLにリダイレクトしたときに、「GET」リクエストメソッドがうまくいきました。ここで は、私は上記をしようとしていたとサンプルコード..フラスコでリダイレクト中にPOSTリクエストを送信

@app.route('/start',methods=['POST']) 
def start(): 
    flask.redirect(flask.url_for('operation')) 

@app.route('/operation',methods=['POST']) 
def operation(): 
    return "My Response" 

である私は、内部でも「/操作」の「POST」要求を行う「POST」リクエストに「/スタート」URLを作りたいですurl.このようにコードを変更すると、「GET」リクエストでコードが正常に動作します。コードはこのように変更してください。

@app.route('/operation',methods=['GET']) 
def operation(): 
    return "My Response" 

しかし、私もPOST要求をすることができるようにしたい。

答えて

53

Flaskで提供redirect機能はデフォルトでは、クライアントに302のステータスコードを送信し、Wikipediaにmentionnedとして:多くのWebブラウザは 変え、この基準を違反した方法でこのコードを実装し

オリジナルの リクエスト(POSTなど)で使用されているタイプにかかわらず、GETへの新しいリクエストのリクエストタイプ。このため、HTTP/1.1(RFC 2616)では、 303と307という新しいステータスコードが追加され、 要求タイプのGETへの変更が要求され、303では元々の要求タイプが保持されています送信されます。

したがって、302の代わりに307のステータスコードを送信すると、ブラウザに使用されているHTTPメソッドが保持され、予期した動作が行われるようにする必要があります。 redirectに電話すると、次のようになります。

flask.redirect(flask.url_for('operation'), code=307) 
+1

ありがとうございます。 (弓) 私は深くフラスコを学ぶことができるソースの提案を依頼する。そのような「コード」関連のものを学びたい。私はそれらのことが核心だと思う。もう一度ありがとうございます:) – ln2khanal

+1

この特定の点については、私はあなたの助けにはならなかったでしょうが、 'redirect'関数のシグネチャを見て、302コードを送信するとあなたを邪魔する可能性があることを見てください。さもなければ、 'Flask'のAPIに関しては、公式の[documentation](http://flask.pocoo.org/docs/)より優れたものはありません。一方、もっと深い例が必要な場合は、[The Flask Mega-Tutorial](http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-parti- hello-world)を使用して、実際の多くのタスクを実行する方法を示します。 – MatToufoutu

+0

あなたのポストリクエストでデータを送信していて、その他のページにリダイレクトする必要がある場合は、新しいビューの機能で 'request.form [""]'を使用してアクセスしてください。送信しているデータ(「ユーザー名」など)。 – OzzyTheGiant

関連する問題