python - Flask view to handle Stripe request can't find stripeToken -


i trying integrate stripe flask, following error appears page loads.

the browser (or proxy) sent request server not understand. 

why getting error , how fix it?

@store.route('/payment',methods=['get', 'post']) def payment():     stripe.api_key = "test_key"     token = request.form['stripetoken']      try:         charge = stripe.charge.create(             amount=1000,             currency="cad",             source=token,             description="example charge"         )     except stripe.error.carderror, e:         pass      return render_template("payment_form.html") 
<script type="text/javascript" src="https://js.stripe.com/v2/"></script> <script type="text/javascript">     stripe.setpublishablekey('test_key');      jquery(function($) {         $('#payment-form').submit(function(event) {             var $form = $(this);             $form.find('button').prop('disabled', true);             stripe.card.createtoken($form, striperesponsehandler);             return false;         });     });      function striperesponsehandler(status, response) {         var $form = $('#payment-form');          if (response.error) {             $form.find('.payment-errors').text(response.error.message);             $form.find('button').prop('disabled', false);         } else {             var token = response.id;             $form.append($('<input type="hidden" name="stripetoken" />').val(token));             $form.get(0).submit();         }     }; </script> 

the reason fails page loads because loading page get request. request.form filled on post request, occurs when submit form. request.form special dictionary raises 400 error instead of keyerror.

only handle form data during post request. remember redirect after post browser doesn't hang on stale form data.

from flask import request, redirect, flash, render_template  stripe.api_key = 'test_key'  @store.route('/payment', methods=['get', 'post']) def payment():     if request.method == 'post':         token = request.form['stripetoken']          try:             charge = stripe.charge.create(amount=1000, currency="cad", source=token, description="example charge")             return redirect(request.path)         except stripe.error.carderror, e:             flash('error processing payment.', 'error')      return render_template('payment_form.html') 

you find lot easier debug app errors if enable debug mode during development: app.run('localhost', debug=true). provide interactive traceback debugger in browswer when app errors occur.


Comments