2017-02-03 8 views
1

たとえば、request.form["name"]と入力すると、POSTによって送信されたフォームから名前を取得する場合、request.form.get["name"]のような別のブランチも作成する必要がありますか?両方のメソッドをサポートしたい場合は、すべてのPOSTとすべてのGETリクエストに対して個別のステートメントを記述する必要がありますか?同じFlaskビューでGETとPOSTを処理する

@app.route("/register", methods=["GET", "POST"]) 
def register(): 
    """Register user.""" 

私の質問は接線的にObtaining values of request variables using python and Flaskに関連しています。ここで概説としてあなたがrequest.methodを使用して、実際の方法を区別することができ

答えて

6

http://flask.pocoo.org/docs/0.10/quickstart/#http-methods

私はあなたがしたいことを想定しています

  • はルートがGET方法
  • 読むとトリガされたテンプレートをレンダリング入力をフォーム入力し、ルートがトリガーされた場合にユーザを登録する

だからあなたの場合は、ドキュメント(上記リンク)に記載したのと似ています

import flask 
app = flask.Flask('your_flask_env') 

@app.route('/register', methods=['GET', 'POST']) 
def register(): 
    if flask.request.method == 'POST': 
     username = flask.request.values.get('user') # Your form's 
     password = flask.request.values.get('pass') # input names 
     your_register_routine(username, password) 
    else: 
     # You probably don't have args at this route with GET 
     # method, but if you do, you can access them like so: 
     yourarg = flask.request.args.get('argname') 
     your_register_template_rendering(yourarg) 
+0

お返事ありがとう!あなたは、それゆえ、あなたが受け入れ答えのチェックマークを取得し、私も言及するのを考えていなかった方法の一部を予想しました。これと上記のアプローチの両方を試してみることは面白いでしょう。それぞれに独自の魅力があります。再度、感謝します! – Ryan

1

あなたは、フォームが有効なデータで提出されるかどうかを確認するために)(validate_on_submitを呼び出すことで、「POST」メソッドを扱うことができ、それ以外の場合、関数はデフォルトでGET要求に応答します。あなたの機能は次のようになります:

@app.route("/register", methods=["GET", "POST"]) 
def register(): 
    """Register user.""" 
    form = SomeForm() 
    # treat POST request 
    if form.validate_on_submit(): 
     # do something ... 
     # return redirect ... 


    # else response to GET request 
    # return render_template... 
+0

多くの感謝!両方の答えは素晴らしいものであり、ソリューションだけでなく、読書のための新しい分野も指摘しています。とても有難い! – Ryan

関連する問題