How to redirect to an external url with parameters and POST method?
17,703
Solution 1
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')
Solution 2
Sending a 307 status code instead of 302 should tell the browser to preserve the used HTTP method and thus have the behavior you're expecting. Your call to redirect would then look like this:
@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)
Author by
Majid Zandi
python developer. (Don’t worry about your choices: just build something.)
Updated on June 04, 2022Comments
-
Majid Zandi almost 2 years
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
-
Majid Zandi over 9 yearshow to pass parameter and method to redirect method?