在Python中访问Jquery键/值

时间:2017-03-27 08:07:20

标签: javascript jquery python flask

我有一个简单的表单,我需要访问表单的jquery代码的键/值和属性。此外,当我尝试使用request.form [' stripeToken']在我的视图中创建客户时,它会在结束时提供错误。我需要使用键/值属性访问Jquery脚本中的以下字段:

$("#stripeToken").val(token.id);
$("#stripeEmail").val(token.email);

以下是代码:

Jquery代码:

<form id="myForm" action="/yearly" method="POST">

<input type="hidden" id="stripeToken" name="stripeToken" />
<input type="hidden" id="stripeEmail" name="stripeEmail" />
<button id="customButton">Purchase</button>
</form>

<script type="text/javascript">
var handler = StripeCheckout.configure({
key: 'pk_test_YgHVTCLIMQLW4NV6ntnJPAXs',
image: 'https://stripe.com/img/documentation/checkout/marketplace.png',
locale: 'auto',
token: function (token) {

$("#stripeToken").val(token.id);
$("#stripeEmail").val(token.email);
$("#myForm").submit();
                    }
                });

$('#customButton12').on('click', function (e) {
      handler.open({
      name: 'Yearly',
      description: 'Yearly Charge',                            
      amount: 9500
                    });
                    e.preventDefault();
                });
          $(window).on('popstate', function () {
                    handler.close();
                });

                </script>

以下是观点:

@app.route('/yearly', methods=['GET', 'POST'])
def yearly_charge():


    key = stripe_keys['publishable_key']
    data = get_profile_data(session['auth_token'])       
    profile_data = data['Student']
    student_id = profile_data.id
    student = get_profile_data(session['auth_token'])['StudentProfile']    
    pkg = Package.query.filter_by(student_id=profile_data.id).first()
    # customer
    stripe_token = request.form['stripeToken']
    email = request.form['stripeEmail']
    if not pkg:

        try:
            customer = stripe.Customer.create(
                email=email,
                source=request.form['stripeToken']

            )
            print request.form
            subscription = stripe.Subscription.create(
                customer=customer.id,
                plan="yearly",
            )
            student_id = profile_data.id
            student.stripe_customer_id = customer.id
            student.stripe_subscription_id = subscription.id
            package = Package(
                student_id=student_id,
                stripe_id = customer.id,
                student_email=request.form['stripeEmail'],
                is_active=True,
                package_type='yearly',
                subscription_id=subscription.id
            )
            dbase.session.add(package)

            dbase.session.commit()

        except stripe.error.CardError as e:
            # The card has been declined
            body = e.json_body
            err = body['error']
        flash("You've successfylly subscribed for annual package.")

    return redirect(url_for('new_template', key=key))

错误:

stripe.error.InvalidRequestError
InvalidRequestError: Request req_AMbjoYEtQR1d6Y: Invalid source object: must be a dictionary or a non-empty string. See API docs at https://stripe.com/docs'

1 个答案:

答案 0 :(得分:3)

您似乎正在尝试为条带实现自定义按钮。如果您不知道如何在python和js之间进行通信,那么有一种简单的方法,而不是编写所有代码。

<form action='/yoururl' method='post'>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
               data-key="{{ key }}"
               data-description="Your Description"
               data-amount="500"
               data-locale="auto"></script>
               <input type="submit" value='Subscribe' class='btn' style='height:33px;width:50%;color:white;'>
               </form>
               <script>
document.getElementsByClassName("stripe-button-el")[0].style.display = 'none';
               </script>

代码中实际发生的是它隐藏了默认的条带按钮。那么任何输入按钮都可以在标签内部使用。您可以使用多个按钮,例如,如果您有另一个按钮,您可以使用不同的价格或其他变量,只需更改下面的脚本:

 <script>
document.getElementsByClassName("stripe-button-el")[1].style.display = 'none';
               </script>     

如果有第三个按钮,您可以这样做:

        <script>
document.getElementsByClassName("stripe-button-el")[2].style.display = 'none';
               </script>