4

フラスコのアクションURLに送信する前にフォームデータを保存したい

<form action="" method="POST">
    <input type="hidden" name="PAYEE_ACCOUNT" value="U1234567">
    <input type="hidden" name="PAYEE_NAME" value="Name">
    <input type="text"   name="PAYMENT_AMOUNT">
    <input type="submit" name="PAYMENT_METHOD" />
</form>

このフォームを送信できますが、送信前にフォーム データを保存したい

意見:

@mod.route('/payment/', methods=['GET', 'POST'])
def payment():
    if request.method != "POST":
        return render_template('form.html')

    form = request.form

    form_data = {'PAYEE_ACCOUNT': form['PAYEE_ACCOUNT'],
                 'PAYEE_NAME': form['PAYEE_Name'],
                 'PAYMENT_AMOUNT' : form['PAYMENT_AMOUNT']
                 }

    # Save Data

    import urllib
    params = urllib.urlencode(form_data)

    url = 'http://www.example.com'
    return redirect(url, params)

私を助けてください

4

3 に答える 3

10

302 の代わりに 307 ステータス コードを送信すると、ブラウザは使用されている HTTP メソッドを保持するように指示され、期待どおりの動作が得られます。リダイレクトの呼び出しは次のようになります。

@mod.route('/payment/', methods=['GET', 'POST'])
def payment():
    if request.method != "POST":
        return render_template('form.html')

    form = request.form

    form_data = {'PAYEE_ACCOUNT': form['PAYEE_ACCOUNT'],
                 'PAYEE_NAME': form['PAYEE_Name'],
                 'PAYMENT_AMOUNT' : form['PAYMENT_AMOUNT']
                 }

    # Save Data

    url = 'http://www.example.com'
    return redirect(url, code=307)
于 2014-11-16T14:40:55.343 に答える
0

Flask.redirect を使用する必要があります

フラスコ.リダイレクト(場所、コード= 302)

呼び出された場合にクライアントをターゲットの場所にリダイレクトする応答オブジェクト (WSGI アプリケーション) を返します。サポートされているコードは 301、302、303、305、および 307 です。300 は実際のリダイレクトではないためサポートされず、304 は定義された If-Modified-Since ヘッダーを含む要求に対する応答であるためサポートされていません。

パラメータ:
location – 応答がリダイレクトされる場所。code – リダイレクト ステータス コード。デフォルトは 302 です。

サンプルコード:

import os
from flask import Flask,redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("http://www.example.com", code=302)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

フラスコのドキュメントのドキュメントを参照してください。

于 2014-11-13T09:34:37.363 に答える