Search code examples
pythonhttp-redirectflaskpost-parameter

How to redirect to an external url with parameters and POST method?


I want save form data before submit to action url in flask

<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>

I can submit this form, but i want save form data before submit

View:

@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)

Please help me


Solution

  • I've solved this problem by using JavaScript.

    First, sending the data to server.

    JavaScript code:

    <script type="text/javascript">
      var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
    
      $(function() {
        $('#PAYMENT_METHOD').bind('click', function() {
          $.getJSON($SCRIPT_ROOT +'/credit/save_transaction', {
            PAYMENT_ID: $('input[name="PAYMENT_ID"]').val(),
            PAYMENT_AMOUNT: $('input[name="PAYMENT_AMOUNT"]').val(),
            SUGGESTED_MEMO: $('input[name="SUGGESTED_MEMO"]').val()
          }, function(data) {
             if (data.result == 'ok') {
                $('#form_payment').submit();
             }
          });
          return false;
        });
      });
    </script>
    

    Then, saving the data and returning result.

    View code:

    @mod.route('/save_transaction', methods=['GET', 'POST'])
    def save_transaction():
        follow_num = request.args.get('PAYMENT_ID')
        amount = request.args.get('PAYMENT_AMOUNT')
        memo = request.args.get('SUGGESTED_MEMO')
    
        #Save Data
    
        return jsonify(result='ok')