2016-06-17 9 views
1

私はビューメソッドAでレンダリングしたショッピングカートを持っています。を介して、カート内の詳細をpesapal apiに送信したいと考えています。私はsandbox app, PaymentViewと同じ方法を使用しています。ショッピングカートには、APIにデータを送信するためのチェックアウトボタンがあります。サンドボックスメソッドsimlpyはデータを辞書(order_info)として取得し、url(get_payment_url)にフィードしてapiをフィードします。したがって、テンプレートを開くとapiのiframeは辞書に指定されたamoutを引き出します。カートを使用してデータを送信するにはどうすればよいですか?ドキュメントとsource code見れDjango payment integration

## Sandbox method submitting data to the api 
class PaymentView(TemplateView, PaymentRequestMixin): 
    template_name = 'payment/payment.html' 
    # how the sandbox app submits data to api: 

    def get_context_data(self, **kwargs): 
     ctx = super(PaymentView, self).get_context_data(**kwargs) 

     order_info = { 
     'amount': '1000', 
     'description': 'Payment for Stuff', 
     'reference': 2, 
     'email': '[email protected]' 
    } 

    ctx['pesapal_url'] = self.get_payment_url(**order_info) 
    return ctx 

## view method A: 
def show_cart(request, template_name="payment/cart.html"): 
    if request.method == 'POST': 
     postdata = request.POST.copy() 
     if postdata['submit'] == 'Remove': 
      cart.remove_from_cart(request) 
     if postdata['submit'] == 'Update': 
      cart.update_cart(request) 
     if postdata['submit'] == 'Checkout': 
      # submission to api should occur here 
    cart_items = cart.get_cart_items(request) 
    cart_subtotal = cart.cart_subtotal(request) 
    return render_to_response(template_name, locals(), context_instance=RequestContext(request)) 

# my url 
urlpatterns = patterns('cart.views', 
(r'^$', 'show_cart', { 'template_name': 'payment/cart.html' }, 'show_cart'), 
) 

答えて

0

、任意のデータを設定する方法があるようには思えません。これが行われた例がありますか?

+0

実際には、あなたは、APIに送信するデータセットを指していますか? @Martinは、辞書としてXMLペイロードを生成するメソッド 'generate_payload'をチェックアウトする[ここ](https://github.com/odero/django-pesapal/blob/master/django_pesapal/views.py) –

+0

appはフォーム提出の後でしか利用できないので、ユーザーがもう一度オプションを編集できるようにする新しいupdate_viewメソッドを作成しました。同じテンプレートにカート付きの支払いタブがあり、それは更新ビューなので、アイテムのデータはあらかじめ入力されていますので、投稿は簡単です@MartinHallén –

1

あなたは、djangoがテンプレートまたはこのケースではあなたのカートにあなたのデータを解析させることで、すぐに降りるでしょう。これは、メソッドが必要なデータを返すようにすることで行うことができます。ような何か:次にAPIは残りをやらせる

{{yourvariable}} 

return render(request, 'yourpage.html', 
       {'yourvariable':yourvariable}, context_instance=RequestContext(request)) 

は、次に同じようにテンプレート(あなたのケースではカート)であなたの値を取得します。

+0

しかし、どこでAPI呼び出しをして、私はデータを返しますか? –

+0

こんにちはこれは完全に働いた!!私は新しいupdate_viewメソッドを使ってデータを解析し、apiに実際に滑らかに投稿しました。これはどういうことですか?データが送信された後にデータが送信される同じテンプレートの別のタブでレンダリングするようにshow_cartメソッドを変更しました。ユーザーは、テーブルが事前入力されたカートタブに転送され、提出の準備 –